AlterActivity.java
此程式主要當使用者拔掉耳機後,會跳出一個視窗告訴使用者,請插回耳機,不然就要關掉FMRadio。
雖然這段程式挺短的.但是非常精華阿
開頭第一句話就解釋了一切
/** AlertActivity: use as a dialog, since Service cannot pop up a dialog */
這是個問題
原因
當我們利用Service 去接受系統傳來的訊息…但由於service並沒有對其他activity進行畫面變更的功能…這也是android 對於service所作的限制
也可以轉化成
/*在界面上添加一个VIEW,但是这个窗口不想依附任何一个activity*/
有以下幾個解決方案
A1:
主要來說service並沒有context去取得view
那或許可以說…那當要顯示dialog時…我就傳入一個context
但是service接收到系統訊息時(hdmi,usb,phone call)並無法確認自己目前再mainthread的activity是哪一個
那我們乾脆就不管是哪一個activity再跑
直接去取得WindowManager,ViewManager不就好了
的然後添加一個dialog view
http://developer.android.com/reference/android/view/WindowManager.html
window view manger
http://blog.csdn.net/xieqibao/article/details/6567814
code implement:
http://blog.csdn.net/fengqiaoyebo2008/article/details/6309676
A2:
如果不傳一個context給我…那麼啟動一個新的activity長的跟dialog很像不就好了
FMRadio2的實作方法就是這樣
需要注意的部份在於啟動方法
Intent startIntent = new Intent(this, AlertActivity.class); startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
<activity android:name=".AlertActivity" android:theme="@style/Theme.AlertDialog" > <intent-filter> <action android:name="toActivity" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
A3:
修改建立的Dialog屬性LayoutParams
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
http://hi.baidu.com/lphack/item/1879eb8a614c9659840fabc4
http://www.dotblogs.com.tw/merlin/archive/2012/04/13/71480.aspx