致命异常:java.lang.SecurityException:缺少插入徽章的权限

Posted

技术标签:

【中文标题】致命异常:java.lang.SecurityException:缺少插入徽章的权限【英文标题】:Fatal Exception: java.lang.SecurityException: Missing permission to insert badges 【发布时间】:2017-01-07 13:17:43 【问题描述】:

我是 android 开发新手,在 Play 商店发布后,我在某些设备上遇到以下异常。这对我来说是完全未知的例外。此异常强制停止/崩溃我的应用程序。

完整的堆栈跟踪记录:

Exception java.lang.SecurityException: Missing permission to insert badges
android.os.Parcel.readException (Parcel.java:1553)
android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java:185)
android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java:137)
android.content.ContentProviderProxy.insert (ContentProviderProxy.java:476)
android.content.ContentResolver.insert (ContentResolver.java:1213)
android.content.AsyncQueryHandler$WorkerHandler.handleMessage (AsyncQueryHandler.java:96)
android.os.Handler.dispatchMessage (Handler.java:102)
android.os.Looper.loop (Looper.java:211)
android.os.HandlerThread.run (HandlerThread.java:61)

如上所述,异常不包含与我的应用程序相关的任何代码部分,而且我也没有找到任何令人满意的解决方案来解决上述问题。

编辑: 当我要更新我的应用程序时,我正在使用外部库(SDK)进行推送通知,添加我的应用程序开始在 Play 商店“必需权限”部分显示 11 个新权限

其中一些权限是:

    com.htc.launcher.permission.READ_SETTINGS
    com.htc.launcher.permission.UPDATE_SHORTCUT
    com.huawei.android.launcher.permission.CHANGE_BADGE
    com.huawei.android.launcher.permission.READ_SETTINGS
    com.huawei.launcher.permission.WRITE_SETTINGS
    com.sec.android.provider.badge.permission.READ
    com.sec.android.provider.badge.permission.WRITE
    com.sonyericsson.home.permission.BROADCAST_BADGE
    com.sonymobile.home.permission.PROVIDE_INSERT_BADGE

我没有在我自己的清单文件中添加这些权限,因此我通过在应用程序标记中添加以下代码行来修改我的 'AndroidManifest' 文件:

<application
     <--some code-->
    tools:replace="android:icon, android:allowBackup"
    >

并使用 SDK 的 .jar 文件而不是像这样编译它

compile 'com.abc.xyz:3.+@aar' //建议用于android studio in (build.gradle)

应用上述过程后,这些权限被删除,我上传了我的应用程序。

只有这些我在我的新版本应用程序中执行的操作。我最近还查看了该库项目,它包含一个文件夹 'shortcutbadger',其中包含一些子文件夹和内部的 .class 文件

是否由于上述更改,我开始收到该异常?请解释/帮助!

【问题讨论】:

您的应用程序中应该有一些代码,其中应用程序图标更新为徽章。通常徽章是通过 Intents 更新的。因此,请尝试找出您在哪里执行此操作并发布代码。不同的电话供应商也需要不同的意图来完成这项工作。 检查this @sJy 添加了完整的细节和我应用的部分代码,之后开始面临上述异常 你用的“外部库”是哪个?? 【参考方案1】:

设备是三星的吗?三星和其他一些品牌有启动器,您可以在其中向应用图标添加徽章,也许您的代码或库中的代码正在尝试使用它?

您需要为其添加正确的权限到您的 App Manifest。

<uses-permission android:name="com.sec.android.provider.badge.permission.READ" />
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE" />

【讨论】:

【参考方案2】:

如果您使用的是“ShortcutBadger”Android 库,那么您需要按照此说明进行操作

API &gt;= 23 现在需要特殊权限。尝试通过 onRequestPermissionsResult

also check this url

【讨论】:

【参考方案3】:

正如您所说,您可以使用相同 SDK 的 Jar 更改 gradle 依赖项。但是在使用 Jar 时,您应该确保在 manifest 中适当地添加所有权限,以使 SDK 正常工作。

您使用的 OneSignal SDK 推荐 Android Studio 和 Jar 文件的 gradle 依赖项,并在 Manifest for Eclipse 中具有附加权限。由于您在 Studio 中将 gradle 替换为 Jar,因此请确保您已将以下权限添加到清单文件中。

<permission android:name="$manifestApplicationId.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
<uses-permission android:name="$manifestApplicationId.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<!-- START: ShortcutBadger -->
<!-- Samsung -->
<uses-permission android:name="com.sec.android.provider.badge.permission.READ"/>
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/>

<!-- HTC -->
<uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT"/>

<!-- Sony -->
<uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE"/>
<uses-permission android:name="com.sonymobile.home.permission.PROVIDER_INSERT_BADGE"/>

<!-- Apex -->
<uses-permission android:name="com.anddoes.launcher.permission.UPDATE_COUNT"/>

<!-- Solid -->
<uses-permission android:name="com.majeur.launcher.permission.UPDATE_BADGE"/>

<!-- Huawei -->
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" />
<uses-permission android:name="com.huawei.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS" />
<!-- End: ShortcutBadger -->

【讨论】:

以上是关于致命异常:java.lang.SecurityException:缺少插入徽章的权限的主要内容,如果未能解决你的问题,请参考以下文章

apk之间数据共享的方式

Android 的 READ_EXTERNAL_STORAGE 权限

获取“致命异常 AsyncTask #1”

获取 Android 运行时:致命异常

片段中的Android致命异常

致命异常主要android