2

android.permission.GET_ACCOUNTS許可を使用して電子メールIDを取得しています。

 try {
            Account[] accounts = AccountManager.get(this).getAccountsByType("com.google");
            for (Account account : accounts) {
                emailid = account.name;
                Log.e("account",emailid);
            }
        } catch (Exception e) {
            Log.i("Exception", "Exception:" + e);
        }

このコードは、Lollipop 5.1 までのすべてのデバイスで機能します。しかし、Marshmallow 6.0 では動作しません。

誰でもこの問題を解決するのを手伝ってくれますか? logcat でエラーが発生することさえありません。

4

3 に答える 3

2

このコードは機能しており、Android 4.4.4、5.0.1、6.0、および 6.0.1でテスト済みです。

String possibleEmail = "";
    final Account[] accounts = AccountManager.get(context).getAccounts();
    //Log.e("accounts","->"+accounts.length);
    for (Account account : accounts) {
        if (Patterns.EMAIL_ADDRESS.matcher(account.name).matches()) {
            possibleEmail = account.name;
        }
    }

possibleEmailデバイスの電子メールです。

于 2016-03-04T06:42:42.413 に答える
0

getGMailAccount メソッドを呼び出すことにより、さまざまな状況で簡単に使用できる別のサービス クラスとしての例。

パブリック クラス GMailAccountService {

private static final int MIN_SDK_FOR_REQUESTING_GET_ACCOUNTS = 22;
private static final int GET_ACCOUNTS_PERMISSION_REQUEST_CODE = 112;

private Activity activity;

public GMailAccountService(Activity activity) {
    this.activity = activity;
}

public String getGMailAccount() {
    if(android.os.Build.VERSION.SDK_INT > MIN_SDK_FOR_REQUESTING_GET_ACCOUNTS){
        if(!isGetAccountsPermissionAllowed()){
            requestGetAccountsPermission();
            return getGMailAccount();
        }
    }
    return extractAddressFromAccountManager();
}

private boolean isGetAccountsPermissionAllowed() {
    int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.GET_ACCOUNTS);
    if (result == PackageManager.PERMISSION_GRANTED)
        return true;
    return false;
}

private void requestGetAccountsPermission(){
    ActivityCompat.shouldShowRequestPermissionRationale(activity, android.Manifest.permission.GET_ACCOUNTS);
    ActivityCompat.requestPermissions(activity,new String[]{android.Manifest.permission.GET_ACCOUNTS}, GET_ACCOUNTS_PERMISSION_REQUEST_CODE);
}


public String extractAddressFromAccountManager(){

    Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8
    Account[] accounts = AccountManager.get(activity).getAccountsByType("com.google");
    for (Account account : accounts) {
        if (emailPattern.matcher(account.name).matches()) {
            return account.name;
        }
    }
    return null;
}

}

于 2017-05-11T12:59:39.330 に答える