我有这个代码从设备中获取gmail id,但它不能在6.0及以上版本中运行

时间:2017-04-04 05:39:17

标签: android

我正在尝试自动从设备获取主要Hmail ID,但它仅在5.0及以下版本中运行,不适用于6.0及以上版本。

我的代码是:

private TextView text;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    text = (TextView) findViewById(R.id.text);
    String email=getEmail(this);
    if(email !=null)
    {
        text.setText(email);
    }
    else {
        text.setText("Account not found");
    }
}

static String getEmail(Context context) {
    AccountManager accountManager = AccountManager.get(context);
    Account account = getAccount(accountManager);

    if(account==null)
    {
        return null;
    }

    else
    {
        return account.name;
    }
}

private static Account getAccount(AccountManager accountManager)
{
    Account[] accounts=accountManager.getAccountsByType("com.google");
    Account account;
    if(accounts.length>0)
    {
        account=accounts[0];
    }
    else {
        account=null;
    }
    return account;
}

2 个答案:

答案 0 :(得分:0)

您需要为清单添加获取帐户权限。如果您已经这样做了,则需要为Android 6.0 marshmallow添加运行时权限Manifest.permission.GET_ACCOUNTS以获取Google帐户和Gmail帐号。

首先请求获取帐户的权限,然后在onRequestPermissionsResult中运行您的方法getEmail以获取gmail ID。

快乐编码!!

答案 1 :(得分:0)

请管理marshmallow所需的运行时权限。喜欢这个

首先在活动中声明两个变量

private static final int REQUEST_CODE_PERMISSION = 1;
String mPermission = Manifest.permission.GET_ACCOUNTS;

在onCreate方法之后

 private void getPermission() {
 if(Build.VERSION.SDK_INT>= 23) {

        if (checkSelfPermission(mPermission) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{mPermission,
                    },
                    REQUEST_CODE_PERMISSION);
            return;
        }

        else
        {
            methodGetGmailAccont();
        }
    }
}

 private void methodGetGmailAccont() {
/* here your logic to get account */ 
}

覆盖onRequestPermissionsResult方法之后

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    Log.e("Req Code", "" + requestCode);
    if (requestCode == REQUEST_CODE_PERMISSION) {
        if (grantResults.length == 1 &&
                grantResults[0] == MockPackageManager.PERMISSION_GRANTED ) {
            /* here permission approve so we called our logic  */

              methodGetGmailAccont()

        }
        else{
            /* here user deny permission,again called method to get permission */
              getPermission();
        }
    }
}