牛轧糖和奥利奥设备上的警报类型吐司崩溃

时间:2017-12-29 07:50:44

标签: android alert alertdialog toast

我正在尝试显示提醒。其类型以下面的方式设置为烤面包

alert.getWindow().setType(Windows agar.LayoutParams.TYPE_TOAST)

但是这会在更高版本的设备上崩溃

2 个答案:

答案 0 :(得分:0)

这需要SYSTEM_ALERT_WINDOW权限:

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

正如文档所说:

  

很少有申请人应该使用此权限;这些窗户都是   用于与用户进行系统级交互。

另一种解决方案是将窗口类型设置为系统对话框:

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

尝试通过传递ActivityName.this代替getApplicationContext()

来设置对话框

如果您使用下面的设置对话框,请尝试我解释

AlertDialog alertDialog = new AlertDialog.Builder(this).create();

尝试使用

AlertDialog alertDialog = new AlertDialog.Builder(FirstActivity.getInstance()).create()

<强> For more detail Check this

  

更新:

在设置SYSTEM_ALERT_WINDOW被授予的设置中检查应用信息,如果没有,则尝试在运行时获得该权限。对于问题的答案下面的检查。

How to get SYSTEM_ALERT_WINDOW permission at run time ?

答案 1 :(得分:0)

问题:

当应用程序尝试通过打开对话框从后台线程(AsyncTask)通知用户时,会发生此异常。     如果你试图从后台线程修改UI(通常来自AsyncTask的onPostExecute())并且如果活动进入完成阶段,即明确调用finish(),用户按下主页或后退按钮或由Android制作的活动清理然后你得到这个错误。

<强>原因:

此异常的原因是,正如异常消息所示,活动已完成但您正在尝试显示包含已完成活动的上下文的对话框。由于没有窗口可以显示对话框 android运行时抛出此异常。

更新:

顾名思义,窗口标记是一种特殊类型的Binder标记,窗口管理器使用它来唯一地标识系统中的窗口。窗口令牌对于安全性非常重要,因为它们使恶意应用程序无法在其他应用程序的窗口上绘制。窗口管理器通过要求应用程序传递其应用程序的窗口令牌作为每个添加或删除窗口的请求的一部分来防止这种情况。如果令牌不匹配,则窗口管理器拒绝该请求并抛出BadTokenException。如果没有窗口令牌,则无法进行必要的识别步骤,窗口管理器将无法保护自己免受恶意应用程序的攻击。<​​/ p>