我们有一个非常大且非常受欢迎的应用程序,具有相当多的权限。
似乎仅在摩托罗拉设备(XT1254,XT1585,XT1565),Android 5.1和5.1.1上,我们遇到了这类崩溃:
Fatal Exception: java.lang.SecurityException: Permission Denial: not allowed to send
broadcast com.motorola.intent.SYSTEM_DIALOG_POPUP from pid=15407, uid=10164
at android.os.Parcel.readException(Parcel.java:1546)
at android.os.Parcel.readException(Parcel.java:1499)
at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:2864)
at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1510)
at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:382)
at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:382)
at android.app.Dialog$2.run(Dialog.java:316)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
上述统计数据是使用Crashlytics收集的。
不确定是否是因为这个,但应用程序的权限之一是“SYSTEM_ALERT_WINDOW”,以便能够在其他应用程序之上显示内容。
事情是,这个错误似乎是因为摩托罗拉的代码本身,我在互联网上找不到任何关于它的信息。
除了在互联网上搜索此例外,我还试图找到如何联系摩托罗拉本身,包括寻找开发者论坛,但我没有这样做。
我也试过在Android的小组上发帖:
https://code.google.com/p/android/issues/detail?id=201631
在这种情况下可以做些什么?
为什么会发生?是因为许可吗?有解决方法吗?
答案 0 :(得分:0)
嗨,实际上,当我们构建一个在其他应用程序之上显示笔记的应用程序时,我和我的团队成员面临着完全相同的问题。
经过长时间的研究后,我们发现“SYSTEM_ALERT_WINDOW”权限已获得签名许可,并且由于不让Lollipop 5.1显示弹出窗口而导致问题
作为解决方法,我们需要明确要求用户通过执行此操作为您的应用授予叠加权限。
public void checkOverlayPermission(){
if(!Settings.canDrawOverlays(this)){
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:"+getPackageName()));
startActivityForResult(intent, ApplicationConstants.OVERLAY_PERMISSION);
}
}
希望这有帮助