2017-03-21 3 views
3

Ich entwickle eine Anwendung, wo ich die Liste der Konten auf dem Telefon eines Benutzers sehen muss. Ich habe diesen Code und es scheint perfekt zu funktionieren. Das einzige Problem, vor dem ich stehe, ist, dass ich eine Liste von Konten bekommen möchte und nicht nur eine, wie wird das erreicht? Ich bin mir ziemlich sicher, dass eine Listview erforderlich ist, aber ich habe keine Ahnung, wie kann ich das hier verwenden.Holen Sie sich die Liste der Konten in Android

Der Code:

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(); 
     } 

    } 
} 

Jede Art von Hilfe würde geschätzt.

UPDATE:

Vielen Dank für Ihre Antwort 'AndiGeeky'. Ich konnte den Code ein wenig, einen Blick ändern:

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(); 
     } 
    } 
} 

konnte ich alle Konten in einer Listenansicht drucken.

-Code für 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

machen Sie arryList und fügen Wert der E-Mail von For-Schleife –

+0

Dank Divyesh! –

Antwort

5

Ihre ändern Umsetzung wie folgt:

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(); 
     } 
    } 
} 

Ihr Code:

Hier Ihren Code nur durch die Benutzerkonten Looping und wenn Es folgt Muster erwähnt speichern Sie dieses Konto zu string und lass andere Accounts!

Edited-Code

Ich habe gerade alle Benutzerkonten gespeichert, die Muster in Code in einer Liste erwähnt folgt.

Danke!

+1

Das ist richtig, aber vielleicht müssen Sie darauf hinweisen, was ist der Unterschied zwischen Ihrem Code und OP-Code, um es klarer zu machen :) –

+0

@Sidhi Artha Sicher, danke für die Erwähnung! – AndiGeeky

+0

Danke, aber wird dieser Code mir helfen, jedes Konto, das im Telefon des Benutzers gespeichert ist, zu bekommen? –

Verwandte Themen