2015-01-25 7 views
15

Ho una grande app in Android.Permesso Android.INTERACT_ACROSS_USERS_FULL

Di tanto in tanto l'applicazione si arresta in modo anomalo con un errore non chiaro. Non so esattamente quando e perché questo accada.

java.lang.SecurityException: Permission Denial: get/set setting for user asks 
to run as user -2 but is calling from user 0; this requires 
android.permission.INTERACT_ACROSS_USERS_FULL 

Qualsiasi aiuto?

+0

@offset Hai mai funzionato? – not2qubit

+0

@ user1147688 Non ricordo ... – offset

risposta

7

java.lang.SecurityException: Autorizzazione Denial: get/set impostazione utente chiede per l'esecuzione come utente -2 ma sta chiamando da utente 0; questo richiede android.permission.INTERACT_ACROSS_USERS_FULL

Aggiungi questa android:protectionLevel="signature" nel vostro manifesto.

Per maggiori dettagli, è possibile controllare Permission-Element

come:

<permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" android:protectionLevel="signature"/> 
+1

No, sfortunatamente il bug è successo di nuovo ... Dove aggiungere questa linea? – offset

+0

android: protectionLevel è un attributo valido per . Ce l'hai su e su da @Commonsware Sir –

+2

Ti piace? '' – offset

4

In sintesi da this risposta, e guardando le fonti di UserHandle.java vediamo il significato della quadro utente iD.

# | @UserIdInt   | Value | Status  | Description | 
# | --------------------- | ------ | ---------- | ------------| 
# | USER_OWNER   | 0  | deprecated | "owner" user of the device 
# | USER_SYSTEM   | 0  | ok   | "system" user of the device 
# | USER_ALL    | -1  | ok   | ALL users on the device 
    | USER_CURRENT   | -2  | ok   | the currently active user 
# | USER_CURRENT_OR_SELF | -3  | ok   | id from which we would like to send to the current user 
# | USER_NULL    | -10000 | ok   | An undefined user id 

Quindi, per capire che cosa significa android:protectionLevel="signature", dovrete leggere la pagina su permission-element. Che si riassume nella tabella:

enter image description here

Così che cosa dovete fare nel tuo AndroidManifest.xml dipende molto da quello API è necessario supportare, come più alto> 23 API richiedono anche un android:permissionGroup=definition, per non normali ("pericolosi") i permessi ...

anche bene sapere (da @CommonsWare)

per essere in grado di tenere INTERACT_ACROSS_USERS, la vostra applicazione deve essere firmato tramite la chiave di firma del firmware o deve essere installato sulla partizione di sistema.

Per poter contenere INTERACT_ACROSS_USERS_FULL, l'app deve essere firmata dalla chiave di firma del firmware.

3

Stesso problema mi è stato sempre quando uso billingProcessor.subscribe() o billingProcessor.purchase() con due parametro come attività e product_id del prodotto. Ho superato il valore di product_id è vuoto.

Si prega di assicurarsi che il passaggio del valore nel product_id non sia vuoto.