Android 我有这个代码从设备中获取gmail id,但它在6.0及以上版本中不起作用

Android 我有这个代码从设备中获取gmail id,但它在6.0及以上版本中不起作用,android,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) findViewBy

我正在尝试从设备自动获取主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;
}

您需要将“获取帐户”权限添加到清单。如果您已经这样做了,那么您需要为Android 6.0棉花糖添加运行时权限Manifest.permission.GET_帐户,以获取Google帐户和gmail id

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


快乐编码

请管理棉花糖所需的运行时权限。像这样

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

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

非常感谢您,但第一次它没有显示任何内容,当我打开应用程序第二次它显示gmail id.bcz时,您没有以正确的方式维护权限,这意味着在onRequestPermissionsResult()方法中,如果条件为真,则应用gmail帐户逻辑。如果在使用我的代码时比之后有任何帮助,请向上投票并按正确答案。好的,我更新我的ans,你可以很容易理解。