致命异常:java.lang.SecurityException:缺少插入徽章的权限
Fatal Exception: java.lang.SecurityException: Missing permission to insert badges
我是 Android 开发的新手,在 Play 商店发布后,我在某些设备上遇到以下异常。这对我来说是完全未知的例外。这个异常强制 stop/crash 我的应用程序。
已记录完整堆栈跟踪:
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 商店 'Required permission' 部分显示 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 文件而不是像
那样编译它
编译 'com.abc.xyz:3.+@aar' //建议 android studio in (build.gradle)
应用上述流程后,这些权限被删除,我上传我的应用程序。
只有这些我在新版本的应用程序中执行过。我最近还查看了那个库项目,它包含一个文件夹 'shortcutbadger',其中包含一些子文件夹和 .class 内部文件
是否由于上述更改,我开始收到该异常?请explain/help!
这些设备是三星吗?三星和其他一些品牌有发射器,您可以在其中为应用程序图标添加徽章,也许您的代码或库中的代码正在尝试使用它?
您需要将正确的权限添加到您的应用程序清单中。
<uses-permission android:name="com.sec.android.provider.badge.permission.READ" />
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE" />
如果您正在使用 "ShortcutBadger" Android 库,那么您需要遵循此说明
API >= 23
现在需要特殊许可。努力通过onRequestPermissionsResult
正如您所说,您可以使用相同 SDK 的 Jar 更改 gradle 依赖项。但是在使用Jar 时,您应该确保所有的权限都在manifest 中适当地添加,以使SDK 正常工作。
您使用的 OneSignal SDK 推荐 gradle 依赖于 Android Studio & Jar 文件,在 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 -->
我是 Android 开发的新手,在 Play 商店发布后,我在某些设备上遇到以下异常。这对我来说是完全未知的例外。这个异常强制 stop/crash 我的应用程序。
已记录完整堆栈跟踪:
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 商店 'Required permission' 部分显示 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 文件而不是像
那样编译它编译 'com.abc.xyz:3.+@aar' //建议 android studio in (build.gradle)
应用上述流程后,这些权限被删除,我上传我的应用程序。
只有这些我在新版本的应用程序中执行过。我最近还查看了那个库项目,它包含一个文件夹 'shortcutbadger',其中包含一些子文件夹和 .class 内部文件
是否由于上述更改,我开始收到该异常?请explain/help!
这些设备是三星吗?三星和其他一些品牌有发射器,您可以在其中为应用程序图标添加徽章,也许您的代码或库中的代码正在尝试使用它?
您需要将正确的权限添加到您的应用程序清单中。
<uses-permission android:name="com.sec.android.provider.badge.permission.READ" />
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE" />
如果您正在使用 "ShortcutBadger" Android 库,那么您需要遵循此说明
API >= 23
现在需要特殊许可。努力通过onRequestPermissionsResult
正如您所说,您可以使用相同 SDK 的 Jar 更改 gradle 依赖项。但是在使用Jar 时,您应该确保所有的权限都在manifest 中适当地添加,以使SDK 正常工作。
您使用的 OneSignal SDK 推荐 gradle 依赖于 Android Studio & Jar 文件,在 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 -->