Sto utilizzando un PendingIntent
lanciato da AlarmManager
(con setRepeating
) per avviare le scansioni wifi (utilizzando IntentService
) ogni pochi minuti. Sulla maggior parte dei dispositivi e nella maggior parte dei casi, non c'è alcun problema. Tuttavia, su diversi dispositivi ottengo il seguente errore (. Impossibile riprodurre l'errore su qualsiasi dispositivo di prova Si tratta di un crash log dal dispositivo di un utente):SecurityException generato quando si chiama 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)
...
Sto creando il PendingIntent
dalla mia app quindi non vedo alcun motivo per il SecurityException
generato da WifiManager
(Soprattutto perché questo accade raramente).
Il IntentService
lanciato dal codice PendingIntent
è la seguente:
mContext.registerReceiver(mWifiScanReceiver, new IntentFilter(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
boolean ok = mWifiManager.startScan();
Tutte le idee su quello che potrebbe essere la causa?
Si dice che esso richiede android.permission.INTERACT_ACROSS_USERS_FULL o android.permission.INTERACT_ACROSS_USERS premission, hai cercato di aggiungere un po 'nel vostro manifesta? –
@ Berťák, questa autorizzazione è un'autorizzazione di sistema e nessuna app (a meno che non si tratti di un'app di sistema) può richiederlo. Inoltre, non è necessario per chiamare "startScan" e ottenere i risultati attraverso la trasmissione "SCAN_RESULTS_AVAILABLE_ACTION". Questo è ciò che lo rende strano ... – Muzikant
Sembra che il tuo IntentService funzioni in un contesto utente differente. Sembra che uno o più utenti abbiano effettuato l'accesso al tuo telefono. È strano. – ShihabSoft