android不依賴具體activity彈出Dialog對話方塊,即全域性性對話方塊
先說具體做法,原因在其後給出:
寫好Alter功能塊後,在alter.show()語句前加入:
- alert.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
注:alter為AlertDialog型別物件
然後在AndroidManifest.xml中加入許可權:
- "android.permission.SYSTEM_ALERT_WINDOW">
如果只在Service中寫入常在Activity中使用的建立Alter的程式碼,執行時是會發生錯誤的,因為Alter的顯示需要依附於一個確定的Activity類。而以上做法就是宣告我們要彈出的這個提示框是一個系統的提示框,即全域性性質的提示框,所以只要手機處於開機狀態,無論它現在處於何種介面之下,只要呼叫alter.show(),就會彈出提示框來。
轉載自 http://blog.csdn.net/twoicewoo/article/details/7448584
------------------------------------------------------------------
- d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG); //系統中關機對話方塊就是這個屬性
-
//d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); //視窗可以獲得焦點,響應操作
- //d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY); //視窗不可以獲得焦點,點選時響應視窗後面的介面點選事件
-------------------------------------------------------------------
final WindowManager wm = (WindowManager) context.getSystemService("window");
WindowManager.LayoutParams para = new WindowManager.LayoutParams();
para.height = -1;
para.width = -1;
para.format = 1;
para.flags = LayoutParams.FLAG_FULLSCREEN | LayoutParams.FLAG_LAYOUT_IN_SCREEN;
para.type = LayoutParams.TYPE_SYSTEM_ALERT;
final View mView = LayoutInflater.from(context).inflate(
R.layout.xxxxxxxxxx, null);
wm.addView(mView, para);
mView.findViewById(R.id.button).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
wm.removeView(mView);
}
});
參考 http://www.dewen.org/q/3746
---------------------------------------------