Я использую PendingIntent
, запущенный AlarmManager
(с setRepeating
), чтобы начать wifi-сканирование (используя IntentService
) каждые несколько минут. На большинстве устройств и в большинстве случаев нет проблем с этим. Однако на нескольких устройствах я получаю следующее сообщение об ошибке (. Не удалось воспроизвести ошибку на любом тестовом устройстве Это журнал аварии с устройства пользователя):SecurityException брошен при вызове WifiManager startScan
java.lang.RuntimeException: Unable to start service [email protected] with Intent { act=com.myapp.android.ACTION_PERFORM_WIFI_SCAN flg=0x4 cmp=com.myapp/com.mayapp.android.service.MyService (has extras) }: java.lang.SecurityException: Permission Denial: broadcast from android asks to run as user -1 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3021)
at android.app.ActivityThread.-wrap17(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1443)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5415)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:725)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615)
Caused by: java.lang.SecurityException: Permission Denial: broadcast from android asks to run as user -1 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS
at android.os.Parcel.readException(Parcel.java:1599)
at android.os.Parcel.readException(Parcel.java:1552)
at android.net.wifi.IWifiManager$Stub$Proxy.startScan(IWifiManager.java:1045)
at android.net.wifi.WifiManager.startScan(WifiManager.java:1088)
...
Я создаю PendingIntent
из моего приложения поэтому я не вижу причины для SecurityException
, выброшенного из WifiManager
(тем более, что это случается редко).
The IntentService
запущен из PendingIntent
кода выглядит следующим образом:
mContext.registerReceiver(mWifiScanReceiver, new IntentFilter(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
boolean ok = mWifiManager.startScan();
Любые идеи о том, что может быть причиной этого?
Он говорит, что он требует android.permission.INTERACT_ACROSS_USERS_FULL или android.permission.INTERACT_ACROSS_USERS premission, вы пытаетесь добавить некоторые в манифесте? –
@ Berťák, это разрешение - системное разрешение, и никакое приложение (если это не системное приложение) не может запросить это. Кроме того, это не требуется для вызова 'startScan' и получения результатов через трансляцию SCAN_RESULTS_AVAILABLE_ACTION. Вот что делает его странным ... – Muzikant
Кажется, ваш IntentService работает в другом контексте пользователя. Кажется, один или несколько пользователей вошли в ваш телефон. Это странно. – ShihabSoft