6

Tôi đang sử dụng Google Drive Android API mới và tôi có thể kết nối và thực hiện all that it will allow me to do, nhưng để sử dụng Bảng tính, tôi cần trích xuất tài khoản/email từ người dùng đã đăng nhập .Nhận Tên tài khoản/Email từ API Android của Google Drive

Tôi làm như thế nào?

Đây là mã mà tôi kết nối API Google Drive. Nó hoạt động tốt.

private void connect() { 

    if (isGooglePlayServicesAvailable()) { 
     if (mGoogleApiClient == null) { 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addApi(Drive.API) 
        .addScope(Drive.SCOPE_FILE) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .build(); 
     } 
     // And, connect! 

     if (!mGoogleApiClient.isConnecting() && !mGoogleApiClient.isConnected()) { 
      mGoogleApiClient.connect(); 
      writeLog("Connecting..."); 
     } 

    } 
} 

Đây là nơi tôi đang sử dụng API SpreadsheetService, nhưng tôi cần tên tài khoản để có mã thông báo.

String accountName = "???"; // how do I get this From GoogleClientApi/mGoogleApiClient ? 
String accessToken = GoogleAuthUtil.getTokenWithNotification(GDriveActivity.this, accountName, scope, null); 
SpreadsheetService service = new SpreadsheetService("v1"); 

Tôi đã cố gắng này thêm này:

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

... trong phương pháp onConnected, nhưng nó ném một NullPointerException.

Ngoài ra, đây là quyền của tôi:

<uses-permission 
    android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission 
    android:name="android.permission.VIBRATE" /> 
<uses-permission 
    android:name="android.permission.INTERNET" /> 
<uses-permission 
    android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission 
    android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission 
    android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission 
    android:name="android.permission.NETWORK" /> 
<uses-permission 
    android:name="android.permission.USE_CREDENTIALS" /> 
+0

xin vui lòng cung cấp cho nó một https đọc: // các nhà phát triển .google.com/+/mobile/android/people – Raghuram

Trả lời

5

bây giờ tôi đã lùi về dưới đây cho phép tôi để có được tài khoản tại Bất cứ lúc nào.

Khi tôi hỏi câu hỏi này tôi đã có ấn tượng rằng tôi chỉ có thể nhận được nó khi kết nối ban đầu. Rõ ràng là tôi đã sai.

private String getAccountName() { 

    String accountName = null; 

    AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE); 
    Account[] list = manager.getAccounts(); 
    for (Account account : list) { 
     if (account.type.equalsIgnoreCase("com.google")) { 
      accountName = account.name; 
      break; 
     } 
    } 
    return accountName; 
} 

Dĩ nhiên, trong đó có sự cho phép sau trong AndroidManifest:

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
+0

Điều gì sẽ xảy ra nếu bạn có nhiều tài khoản google? Sau đó, bạn chỉ cần automatticaly chọn một trong những đầu tiên. – Roel

+1

Tôi đồng ý với Roel, nếu bạn có nhiều tài khoản thì sao? Đây là chủ đề duy nhất tôi tìm thấy cho cùng một vấn đề tôi đang phải đối mặt. Tôi cần email của người dùng đã đăng nhập Google Drive. Chúng ta đã có một giải pháp thực sự chưa? –

+0

@LucasEduardo bạn đã tìm thấy giải pháp aby? – osayilgan

13

Bạn cần phải thêm:

    .addApi(Plus.API) 

khi xây dựng cho khách hàng. Sau đó, điều này sẽ làm việc trong onConnected(Bundle):

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

giả sử bạn đã có sự cho phép chính xác (mà bạn làm):

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
+0

Có hoạt động ... –

+5

Có thể không có API Plus không? Chỉ sử dụng com.google.android.gms: play-services-identity? – Roel

+0

Plus không còn được dùng nữa. – Jaydev

0

Bạn có thể nhận dữ liệu khác nhau từ Plus.PeopleApi

protected static GoogleApiClient mGoogleApiClient; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN) 
      .addApi(Games.API).addScope(Games.SCOPE_GAMES) 
      .build(); 
} 

@Override 
public void onConnected(Bundle bundle) { 
    String data = Plus.API.getName() + "\n" + 
      Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getName() + "\n" + 
      Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getId() + "\n" + 
      Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getAboutMe() + "\n" + 
      Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getBirthday() + "\n" + 
      Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getBraggingRights() + "\n" + 
      Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getCurrentLocation() + "\n" + 
      Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getNickname() + "\n" + 
      Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getDisplayName() + "\n" + 
      Plus.PeopleApi.getCurrentPerson(mGoogleApiClient).getTagline(); 
    Toast.makeText(this, data, Toast.LENGTH_LONG).show(); 
+1

Plus không được dùng nữa – Jaydev

Các vấn đề liên quan