2017-03-21 29 views
3

我正在開發一個應用程序,我需要查看用戶手機中的賬戶列表。我已經去了這個代碼,它似乎很好地工作。我面臨的唯一問題是我想獲得賬戶列表而不是一個賬戶,那麼如何實現? 我很確定listview是必需的,但我沒有得到任何線索,我該如何在這裏使用它。獲取Android賬戶清單

代碼:

package com.example.root.accountspermission; 

import android.Manifest; 
import android.accounts.Account; 
import android.accounts.AccountManager; 
import android.content.pm.PackageManager; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Patterns; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.regex.Pattern; 

public class MainActivity extends AppCompatActivity { 

    public static final int PERMS_REQUEST_CODE = 1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) { 
      if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.GET_ACCOUNTS)) { 
       ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.GET_ACCOUNTS}, PERMS_REQUEST_CODE); 
      } else { 
       ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.GET_ACCOUNTS}, PERMS_REQUEST_CODE); 
      } 
     } else { 
      //do some stuff 
      String email = null; 

      Pattern gmailPattern = Patterns.EMAIL_ADDRESS; 
      Account[] accounts = AccountManager.get(this).getAccounts(); 
      for (Account account : accounts) { 
       if (gmailPattern.matcher(account.name).matches()) { 
        email = account.name; 
       } 
      } 

      TextView viewEmail = (TextView) findViewById(R.id.email_address_view); 
      viewEmail.setText("Email From Device: " + email); 
      Toast.makeText(this, "Android Device Registered Email Address: " + email, Toast.LENGTH_LONG).show(); 
     } 

    } 
} 

任何形式的幫助,將不勝感激。

UPDATE:

謝謝您的回答 'AndiGeeky'。我能夠修改一下代碼,看看:

import android.Manifest; 
import android.accounts.Account; 
import android.accounts.AccountManager; 
import android.content.pm.PackageManager; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Patterns; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.regex.Pattern; 

public class MainActivity extends AppCompatActivity { 

    private ListView lv; 
    public static final int PERMS_REQUEST_CODE = 1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) { 
      if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.GET_ACCOUNTS)) { 
       ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.GET_ACCOUNTS}, PERMS_REQUEST_CODE); 
      } else { 
       ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.GET_ACCOUNTS}, PERMS_REQUEST_CODE); 
      } 
     } else { 
      //do some stuff 
      lv = (ListView) findViewById(R.id.accountsList); 
      List<String> emails = new ArrayList<String>(); 

      Pattern gmailPattern = Patterns.EMAIL_ADDRESS; 
      Account[] accounts = AccountManager.get(this).getAccounts(); 
      for (Account account : accounts) { 
       if (gmailPattern.matcher(account.name).matches()) { 
        emails.add(account.name); 
       } 
      } 

      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,android.R.id.text1,emails); 
      lv.setAdapter(adapter); 
      //TextView viewEmail = (TextView) findViewById(R.id.email_address_view); 
      //viewEmail.setText("Email From Device: " + emails.size()); 
      Toast.makeText(this, "Android Device Registered Email Address: " + emails.size(), Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

我能夠打印所有在一個列表視圖中的帳戶。

規範XML:

<ListView 
     android:id="@+id/accountsList" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintRight_toRightOf="parent" /> 
+0

使arryList和從for循環添加電子郵件的值 –

+0

感謝Divyesh! –

回答

5

更改您的實現如下:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) { 
      if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.GET_ACCOUNTS)) { 
       ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.GET_ACCOUNTS}, PERMS_REQUEST_CODE); 
      } else { 
       ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.GET_ACCOUNTS}, PERMS_REQUEST_CODE); 
      } 
     } else { 
      //do some stuff 
      ArrayList<String> emails = new ArrayList<>(); 

      Pattern gmailPattern = Patterns.EMAIL_ADDRESS; 
      Account[] accounts = AccountManager.get(this).getAccounts(); 
      for (Account account : accounts) { 
       if (gmailPattern.matcher(account.name).matches()) { 
        emails.add(account.name); 
       } 
      } 

      TextView viewEmail = (TextView) findViewById(R.id.email_address_view); 
      viewEmail.setText("Email From Device: " + emails.size()); 
      Toast.makeText(this, "Android Device Registered Email Address: " + emails.get(0), Toast 
        .LENGTH_LONG).show(); 
     } 
    } 
} 

代碼:

這裏你的代碼只是通過用戶帳戶循環和時它跟隨提到的模式只是存儲到string帳戶並留下其他帳戶!

編輯代碼

我剛纔存儲隨後在列表中的代碼中提到模式的所有用戶帳戶。

謝謝!

+1

這是對的,但也許你需要指出你的代碼和OP代碼之間有什麼區別,以使它更清晰:) –

+0

@Sidhi Artha當然,謝謝提及! – AndiGeeky

+0

謝謝,但這段代碼能幫助我獲得存儲在用戶手機中的每個帳戶嗎? –