#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 с использованием привилегий оператора, но его можно применить к любой функциональности, которую вы пытаетесь достичь