Как исправить java.lang.Предупреждение SecurityException?

#android #invocationtargetexception #android-securityexception

#Android #исключение invocationtargetexception #android-securityexception

Вопрос:

У меня есть это исключение в моем приложении, в разделе предупреждения в Logcat. Приложение является системным приложением.

 java.lang.reflect.InvocationTargetException
 W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
 W/System.err:     at netchanger.tawkon.com.lib.network.NetworkChanger.setPreferredNetwork(NetworkChanger.java:48)
 W/System.err:     at netchanger.tawkon.com.lib.network.NetworkChanger.setPreferredNetwork(NetworkChanger.java:36)
 W/System.err:     at netchanger.tawkon.com.lib.services.LocationMonitorService.stopService(LocationMonitorService.java:57)
 W/System.err:     at com.tawkon.data.lib.service.KeepAliveService$PowerReceiver.onReceive(KeepAliveService.java:154)
 W/System.err:     at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_52497(LoadedApk.java:1313)
 W/System.err:     at android.app.-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ.$m$7(Unknown Source:4)
 W/System.err:     at android.app.-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ.run(Unknown Source:39)
 W/System.err:     at android.os.Handler.handleCallback(Handler.java:790)
 W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
 W/System.err:     at android.os.Looper.loop(Looper.java:164)
 W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6494)
 W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
 W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
 W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 W/System.err: Caused by: java.lang.SecurityException: No Carrier Privilege.
 W/System.err:     at android.os.Parcel.readException(Parcel.java:2005)
 W/System.err:     at android.os.Parcel.readException(Parcel.java:1951)
 W/System.err:     at com.android.internal.telephony.ITelephony$Stub$Proxy.setPreferredNetworkType(ITelephony.java:4237)
 W/System.err:     at android.telephony.TelephonyManager.setPreferredNetworkType(TelephonyManager.java:4821)
 W/System.err:  ... 15 more
  

Я вижу, что это исключение InvocationTargetException и оно вызвано SecurityException.

Что означает «Нет привилегий оператора»? Как я могу избежать этого?

Ответ №1:

Security Exception подразумевает, что требуется разрешение, которое пользователь не предоставил. Убедитесь, что вы запрашиваете правильное разрешение и подтвердите, что пользователь предоставил разрешение перед выполнением функциональности. Читайте в менеджере телефонии

Комментарии:

1. Есть ли способ узнать, какое разрешение мне не хватает? Я предоставил все разрешения, которые я просил.

Ответ №2:

Согласно документации Android для использования android.telephony.TelephonyManager.setPreferredNetworkType() метод ваше приложение должно иметь привилегии оператора.

Привилегии оператора по сути: Android предоставляет специальные привилегии приложениям от оператора мобильной (виртуальной) сети (MNO / MVNOs) через UICC для переопределения определенных конфигураций оператора (например, настроек IMS) на устройстве. Это приложение от operator подписано ключом подписи, хэш-значение которого хранится в UICC, который, в свою очередь, считывается платформой Android, позволяя приложению выполнять вызовы нескольких специальных API

Дополнительную информацию о том, как предоставить привилегии вашему приложению carrier, можно найти здесь. Ссылка объясняет метод переопределения настроек IMS с использованием привилегий оператора, но его можно применить к любой функциональности, которую вы пытаетесь достичь