我试图显示警报。其类型被设置为烤面包在下述方式
alert.getWindow().setType(Windows agar.LayoutParams.TYPE_TOAST)
但这种崩溃更高版本的设备
这就要求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()
更新:
检查应用程序信息中设置,SYSTEM_ALERT_WINDOW
被授予与否,如果没有,那么尝试在运行时获取该权限。对于以下问题的答案,办理入住手续。
问题:
当应用程序正试图通过打开对话框,以通知从后台线程(的AsyncTask)用户会发生此异常。如果你试图修改从后台线程(通常的AsyncTask的onPostExecute())的UI,如果活动进入整理阶段,即)显式调用完成(),用户按HOME键或后退按钮或活动的清理由Android,那么你做得到这个错误。
原因:
这样做的原因的例外是,作为异常消息称,该活动已经结束,但是你想与完成活动的背景下,以显示一个对话框。由于是在对话框中显示了Android运行时没有任何窗口抛出该异常。
更新:
正如其名称所暗示的,一个窗口令牌是一种特殊类型的活页夹的令牌窗口管理器用来唯一标识系统中的一个窗口。因为它们不可能恶意程序借鉴其他应用程序的窗口之上窗口令牌的安全很重要。窗口管理器通过要求应用程序通过他们的应用程序的窗口令牌作为每个请求添加或删除一个窗口的一部分防止这一点。如果令牌不匹配,窗口管理器拒绝该请求,并抛出一个BadTokenException。无窗令牌,这需要识别步骤将是不可能和窗口管理器将无法保护自己免受恶意应用程序。