从一个apk调用另一个apk中的调起Dialog的功能时候遇到的问题,小笔记!

在类似服务中(非Activity),另一个apk以aidl进程与这个服务通讯,连接这个服务,然后所有的实现都要写在服务中,另一个apk只需要获取aidl句柄之后再进行调用对应的方法即可。然后这个apk点击一个按钮调起这个服务中的一个Dialog,二Dialog必须得衣服一个Activity(View)才能弹出,否则就会报错,log如下:
android.view.WindowManager$BadTokenException: Unable to add window – token null is not for an application
AndroidRuntime: at android.view.ViewRootImpl.setView(ViewRootImpl.java:689)
AndroidRuntime: at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:319)
AndroidRuntime: at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
AndroidRuntime: at android.app.Dialog.show(Dialog.java:325)

那怎么解决呢?方法如下:
因为我的服务中本身有handler,这个handler是在new Thread里创建的,所以他的上下都要Looper.prepare和Looper.loop,然后在代码中哪里需要调起Dialog,那就发送一个handler,然后在handler中写弹出Dialog的代码,重点是!!!!!!!!这个Dialog必须是自定义的,必须是自定义的!!!!代码如下:

    case SHOW_ALERT_DIALOG:
        //弹框
        dialog = new MyAlertDialog(mContext,R.style.alert_dialog);
        Window window = dialog.getWindow();
        dialog.setCanceledOnTouchOutside(true);
        //让这个Dialog在任何页面上都能弹出,即让他变成系统级的Dialog
        window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        window.setGravity(Gravity.CENTER);
        dialog.show();
    break;

另一种情况:如果我的代码中没有handler的话,那就代码如下:

    new Thread(){
      public void run(){
        Looper.prepare();//必须得有
        dialog = new MyAlertDialog(mContext,R.style.alert_dialog);
        Window window = dialog.getWindow();
        dialog.setCanceledOnTouchOutside(true);
        //让这个Dialog在任何页面上都能弹出,即让他变成系统级的Dialog
        window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        window.setGravity(Gravity.CENTER);
        dialog.show();
        Looper.loop();//必须得有
        }
    }.start();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值