2015-04-02 24 views
5

Sto lavorando a un'app con funzionalità di accesso social. Così ho creato un progetto di libreria Android il cui ruolo è fornire accesso social con g +, FB, ecc. La mia app sta usando questo progetto di libreria Android per l'accesso social. Ma ora sono di fronte a un problema descritto di seguito.Accesso G + utilizzando i servizi di Google Play che accedono all'email dell'utente gira Manca android.permission.GET_ACCOUNTS

Ho eseguito correttamente l'accesso utilizzando g +.

ma quando sto cercando di ottenere un contratto in e-mail dell'utente

String email = Plus.AccountApi.getAccountName(mGoogleApiClient); 

io sono sempre al di sotto di eccezione stack trace

W/System.err﹕ java.lang.SecurityException: Missing android.permission.GET_ACCOUNTS 
W/System.err﹕ at android.os.Parcel.readException(Parcel.java:1474) 
W/System.err﹕ at android.os.Parcel.readException(Parcel.java:1427) 
W/System.err﹕ at com.google.android.gms.plus.internal.zzd$zza$zza.getAccountName(Unknown Source) 

ho aggiunto tag usi-permesso nel mio progetto Android-biblioteca . Di seguito è riportato il file manifest di Android-libray.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="login.social"> 

    <application > 
     <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 
     <uses-permission android:name="android.permission.INTERNET" /> 
     <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
     <uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
    </application> 

</manifest> 

Qualcuno può guidarmi cosa c'è che non va?

risposta

5

Credo che la vostra manifesta non è valido, provare questo:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="login.social"> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
    <application > 
     <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 
    </application> 
</manifest> 

Date un'occhiata a the android documentation about manifest per maggiori informazioni.

10

Se questo è un problema per Android versione 6 (o successiva) e si compila con Android SDK 23 e si è già verificato due volte che il permesso di GET_ACCOUNTS è nel manifesto, allora il problema potrebbe essere nuove regole per l'autorizzazione di runtime di Android.

Dalla versione Android 6 gli utenti devono richiedere alcune autorizzazioni quando l'applicazione utilizza queste autorizzazioni per la prima volta (anche se è già in Manifest).

È possibile risolvere questo problema come questo:

Mettere questa parte del codice

if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 

    int hasWriteContactsPermission = checkSelfPermission(Manifest.permission.GET_ACCOUNTS); 
    if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) { 
     requestPermissions(new String[] {Manifest.permission.GET_ACCOUNTS}, 
      REQUEST_CODE_ASK_PERMISSIONS); 
     return; 
    } 
} 

invece di

String email = Plus.AccountApi.getAccountName(mGoogleApiClient); 

Quando l'utente consentire o non consentire l'autorizzazione, il metodo onRequestPermissionsResult sarà chiamato e allora puoi chiedere una email.

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    switch (requestCode) { 
     case REQUEST_CODE_ASK_PERMISSIONS: 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // Permission Granted 
       String email = Plus.AccountApi.getAccountName(mGoogleApiClient); 
       Utils.showToast("Hello " + email, mContext);      
      } else { 
       // Permission Denied 
       Utils.showToast("GET_ACCOUNTS Denied", mContext); 
      } 
      break; 
     default: 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 

Se vuoi sapere di più su nuove regole per le autorizzazioni vi consiglio di leggere questo articolo http://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en

0

Le voci manifesto sono sbagliate, è necessario inserire i permessi e utilizza-il permesso di fuori del tag applicazione

Problemi correlati