2017-03-21 1 views
3

私は、ユーザーの電話機のアカウントの一覧を表示する必要があるアプリケーションを開発しています。私はこのコードを読んで、それは完全に動作するようです。私が直面している唯一の問題は、私は口座の一覧を取得したいだけでなく、どのようにこれが達成されるのだろうか? 私はリストビューが必要だと確信していますが、私はここでそれをどのように使うことができるかについての手がかりはありませんでした。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

このコードは、ユーザーの電話に保存されているすべてのアカウントを取得するのに役立ちますか? –

関連する問題