解决方案 »

  1.   

    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" />
    楼主可以试试在服务启动时调用这个方法,如果能弹出再修改成你要的位置就好了
      

  2.   

    你把Looper.prepare() 放到while(true)的前面,Looper.prepare() 放到whiel(true)循环结束处的外面。public void run() {
        Looper.prepare();
        while(true) {
            。
           //弹出对话框
           ....
        }
        Looper.prepare();
    }
      

  3.   

    有用,请教原理!
    不好意思,写错了个地方,第二句Lopper.prepare()改成Lopper.loop()我猜测你之前只能弹出一次是不是把Lopper.prepare() 和loop()放到while(true)循环内了,
    因为loop()方法是个for的死循环,也就是说线程走到loop()之后就一直在这个函数内执行,导致你的while(true)函数实际上只执行了一次循环。