2015-08-28 15 views
5

Su Android M-Preview GoogleAccountCredential.setSelectedAccount non sembra funzionare.Android M - GoogleAccountCredential setSelectedAccount non funziona - il nome non deve essere nullo

Durante il debug, ho notato che dopo aver chiamato quel metodo, i campi dell'oggetto selectedAccount e accountName sono ancora nulli.

Durante il debug si può vedere che la mia variabile accountName non è vuoto o nullo, che io chiamo il .setSelectedAccountName(), ma come si può vedere nella finestra di debug, il campo nella GoogleAccountCredential è ancora nulla.

Debugging window code Debugging window debug values

penso che questo può essere correlato a alcune autorizzazioni? Sul mio manifesto, ho le seguenti autorizzazioni dichiarato:

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> 

So che il permesso GET_ACCOUNTS si ottiene gratuitamente su M (Secondo https://developer.android.com/preview/features/runtime-permissions.html#normal), ma gli altri due permessi sono "sconosciuto" al M-Anteprima . Quindi forse, è quello?

+0

Giuro, M è così pieno di buggy che miagola, mi fa tirare i capelli. Buona fortuna a te uomo! – Sipty

risposta

4

android.permission.GET_ACCOUNTS ha ProtectionLevel: pericolosa ed è ora parte del gruppo Contatti permesso, il che significa che si dovrebbe farne richiesta in fase di esecuzione utilizzando il nuovo Activity.requestPermissions()

Solo allora si può interagire con gli account creati da altre applicazioni sul dispositivo.

+0

Se dai un'occhiata alla documentazione, android.permission.GET_ACCOUNTS è elencato nelle normali autorizzazioni. https://developer.android.com/preview/features/runtime-permissions.html#normal In ogni caso, ho appena provato a richiedere tale autorizzazione, e ora funziona. Supponevo che quel permesso fosse nella lista NORMALE. –

+0

Quella particolare modifica è stata apportata tra Anteprima 2 e Anteprima 3, qualcuno deve aver perso questo punto nella documentazione. Vedrò se riesco a ripararlo. Nel frattempo è possibile ottenere un elenco di tutti i gruppi di autorizzazioni e livelli di protezione utilizzando: adb shell pm lista autorizzazioni -g -f –

+3

Grazie per le informazioni. Qualche informazione sul perché questo permesso è considerato pericoloso? Inoltre, è davvero brutto che quando chiediamo questo permesso, c'è una finestra di dialogo che dice "Permetti a APP XYZ di accedere ai tuoi contatti". Non sto cercando di accedere ai loro contatti, solo i loro nomi di account ... Penso che molti utenti avranno paura. –

0

Ho avuto lo stesso problema.

Usa setSelectedAccount() al posto di setSelectedAccountName()

mCredential = GoogleAccountCredential.usingOAuth2(
       getApplicationContext(), Arrays.asList(SCOPES)) 
       .setBackOff(new ExponentialBackOff()); 

     // to set accountName manually instead of prompting user to select it 
     mCredential.setSelectedAccount(new Account("[email protected]", "com.android.example")); 

impostare l'account che si desidera impostare come l'e-mail e si può dare il vostro nome del pacchetto come secondo parametro.