[Android Pro] service中顯示一個dialog 或者通過windowmanage顯示view

來源:互聯網
上載者:User

標籤:des   android   style   blog   http   io   ar   color   使用   

轉載: http://blog.csdn.net/huxueyan521/article/details/8954844

通過windowmananger來在視窗上添加view的時候,需要設定alert參數,而且要添加alert許可權

mLayoutParams = new WindowManager.LayoutParams(LayoutParams.WRAP_CONTENT,                LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_SYSTEM_ALERT,                LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSPARENT);        mLayoutParams.gravity = Gravity.LEFT | Gravity.TOP;

許可權:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />  

 

dialog是依附於activity存在的。但是app中經常需要使用以下的情況,在service中做一些後台操作,在某個臨界條件滿足時,顯示一個dialog告知使用者。

這時dialog無法直接從service中啟動起來,會報出android.view.WindowManager$BadTokenException:Unable to add window的錯誤。

解決方案有兩種:

1. 顯示一個系統界別的dialog,即全域性質的dialog。這種dialog在任何介面下都可以彈出來。但是,這種dialog不相應home鍵和返回鍵,即強制使用者必須對dialog作出操作後。

使用方法是在dialog.show()語句之前設定dialog的window的type是system alert型。如下:

    dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);      dialog.show();  

還需要在AndroidManifest.xml中增加許可權:

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />  

2. 在dialog的背後加一個透明的activity。即先顯示一個透明的activity,在使用activity的context顯示dialog。需 要注意的是,activity在destroy的時候一定要把dialog給dismiss掉,否則activity消失但dialog還在,會 crash。

透明activity的建立方法是在AndroidManifest.xml中添加theme:

<activity        android:name="com.a.b.activity"           android:theme="@android:style/Theme.Translucent">  </activity>

另外,需要設定activity沒有actionbar,設定方法是在Activity的onCreate方法中增加:

    requestWindowFeature(Window.FEATURE_NO_TITLE);   

 

[Android Pro] service中顯示一個dialog 或者通過windowmanage顯示view

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.