Fatal Exception: java.lang.SecurityException: Отсутствует разрешение на вставку значков

Я новичок в разработке Android, я столкнулся с приведенным ниже исключением на некоторых устройствах после публикации в игровом магазине. Для меня это совершенно неизвестное исключение. Эта исключительная сила останавливает / разбивает мое приложение.

Завершено полное управление стопкой:

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) 

Как упоминалось выше, доза исключения не содержит какой-либо части кода, которая относится к моей заявке, а также я не нашел удовлетворительного решения для вышеупомянутой проблемы.

EDIT: я использую внешнюю библиотеку (SDK) для push-уведомления, добавив, что мое приложение начинает показывать 11 новых разрешений в разделе «Требуемое разрешение» в Play Store, когда я собираюсь обновить свое приложение

Некоторые из этих разрешений:

  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" > 

И используйте файл .jar SDK вместо того, чтобы компилировать его как

Compile 'com.abc.xyz:3.+@aar' // предлагается для студии android в (build.gradle)

После применения вышеуказанного процесса эти разрешения удаляются, и я загружаю свое приложение.

Только эти вещи я выполнил в своей новой версии приложения. Я также недавно рассмотрел этот проект библиотеки и содержит папку «shortcutbadger», которая содержит некоторые подпапки и .class-файл внутри

Из-за вышеперечисленных изменений я начинаю получать это исключение? Объясните / помогите!

Как вы сказали, вы можете изменить зависимость градиента с Jar того же SDK. Но при использовании Jar вы должны убедиться, что все разрешения добавлены соответствующим образом в манифест, чтобы заставить SDK работать должным образом.

OneSignal SDK, который вы использовали, рекомендует использовать зависимость от градиента для файла Android Studio & Jar с дополнительными разрешениями в Manifest for Eclipse. Поскольку вы заменили gradle на Jar в Studio, убедитесь, что в файл манифеста добавлены следующие разрешения.

 <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 --> 

Являются ли устройства Samsung? Samsung и некоторые другие бренды имеют пусковые установки, где вы можете добавлять значки к значкам приложений, возможно, ваш код или код из библиотеки пытается его использовать?

Вам нужно добавить правильное разрешение на это в App Manifest.

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

Если вы используете библиотеку Android «ShortcutBadger», вам необходимо следовать этой инструкции

API >= 23 теперь требуют специального разрешения. Попробуйте сделать это через onRequestPermissionsResult

Также проверьте этот URL-адрес