当前位置: 代码迷 >> Android >> 在Service中弹出Dialog,该怎么处理
  详细解决方案

在Service中弹出Dialog,该怎么处理

热度:8   发布时间:2016-04-28 06:54:20.0
在Service中弹出Dialog
现在有这么个需求:
Service要进行网络请求,  如果有用户预先设定的感兴趣的内容,请弹出对话框,而此时用户可能退出应用了

我现在的问题是,得到数据后对话框弹不出来:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

因为有网络请求, 我在service中新开了个线程来请求,然后使用handle来弹框但报上面这个错
搜了一下, 说是要Looper.prepare()  Looper.loop()  , 试了一下, 可以弹出一次, 但我线程里的方法是white(true){} 无限执行的, 调用这个只能弹出一次,线程就被中止了,求解决办法,先谢过!

------解决方案--------------------
弹出dialog activity就可以
------解决方案--------------------
	public void createDialog(String text) {
final AlertDialog d = new Builder(getApplicationContext()).setMessage(text).setTitle(text).create();
d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
// 这句会使touch事件都失效
// d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
d.setButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
d.dismiss();
}
});
d.show();
}


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

楼主可以试试在服务启动时调用这个方法,如果能弹出再修改成你要的位置就好了
------解决方案--------------------
你把Looper.prepare() 放到while(true)的前面,Looper.prepare() 放到whiel(true)循环结束处的外面。

public void run() {
    Looper.prepare();
    while(true) {
        。。。。
       //弹出对话框
       ....
    }
    Looper.prepare();
}
  相关解决方案