2016-01-28 79 views
3

我正在編寫針對棒棒糖和以上的應用程序。這是我的第一個Android應用程序。Android:AccountManager.getAccounts()返回一個空數組

我想要獲得與設備關聯的所有帳戶的列表。這是我的代碼:

public void getAllContactsAccounts(Context context){ 
     AccountManager accountManager = (AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE); 
     Account[] accounts = accountManager.getAccounts(); 
     System.out.println("PrintingAccounts: " + accounts.length); 
     for(Account a : accounts){ 
      System.err.println("AccountName: " + a.name); 
     } 
    } 

從accountManager.getAccounts陣列()結束具有0的長度,並且沒有任何反應。

我找不出如何解決這個問題。我已經添加了必要的權限(以及其他一些權限),沒有發生安全異常,應用運行正常,但似乎無法檢索帳戶。

任何意見,我可以在這裏做什麼?

+0

我複製了你的代碼並將它運行在我的棒棒糖設備上。列出了我在設備上的兩個Google帳戶。當您在手機上進入設置 - >帳戶時,您是否看到帳戶? –

+0

這可能是因爲Android M中「危險權限」的新概念。查看此答案以獲取更多信息:http://stackoverflow.com/questions/34561188/targetsdkversion-23-returns-0-length-array-via -accountmanager-getaccounts – Pascal

回答

4

由於SdkTarget 23及以上(棉花糖6.0),你需要通過運行時

int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 0; 
    // Here, thisActivity is the current activity 
    if (ContextCompat.checkSelfPermission(this, 
      android.Manifest.permission.GET_ACCOUNTS) 
      != PackageManager.PERMISSION_GRANTED) { 

     // Should we show an explanation? 
     if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
       android.Manifest.permission.GET_ACCOUNTS)) { 

      // Show an expanation to the user *asynchronously* -- don't block 
      // this thread waiting for the user's response! After the user 
      // sees the explanation, try again to request the permission. 

     } else { 

      // No explanation needed, we can request the permission. 

      ActivityCompat.requestPermissions(this, 
        new String[]{android.Manifest.permission.GET_ACCOUNTS}, 
        MY_PERMISSIONS_REQUEST_READ_CONTACTS); 
    } 
} 
    String possibleEmail=""; 
    try{ 
     possibleEmail += "************* Get Registered Gmail Account *************\n\n"; 
     Account[] accounts = AccountManager.get(this).getAccountsByType("com.google"); 

     for (Account account : accounts) { 

      possibleEmail += " --> "+account.name+" : "+account.type+" , \n"; 
      possibleEmail += " \n\n"; 

     } 
    } 


    Log.i("EXCEPTION", "mails: " + possibleEmail); 

一個片段是在的onCreate()使用僅供參考

索要權限的用戶訪問

Here's a reference of these changes and some Documentation

+0

這對我不起作用 – JPM

+0

我有同樣的問題,我已經採取了權限,任何解決方案? –