Getting the Gmail Id of the User In Android 6.0 marshmallow

后端 未结 3 795
遇见更好的自我
遇见更好的自我 2021-01-15 05:50

I am getting email id by using android.permission.GET_ACCOUNTS permission.

 try {
            Account[] accounts = AccountManager.get(this).getA         


        
相关标签:
3条回答
  • 2021-01-15 06:17

    Example as a separate service class to be easily used in different situations by calling getGMailAccount method.

    public class 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;
    }
    

    }

    0 讨论(0)
  • 2021-01-15 06:23

    This code is working, Tested on Android 4.4.4, 5.0.1, 6.0 and 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 is the email of the device.

    0 讨论(0)
  • 2021-01-15 06:32

    You need to add run-time permission for Android 6.0 marshmallow. This is working code.

    // Check my test phone os version that is it marshmallow. Use this inside onCreate method.

       private static final int REQUEST_GET_ACCOUNT = 112;
    
      if(android.os.Build.VERSION.SDK_INT > 22){
                if(isGETACCOUNTSAllowed()){
                   // do your task 
    
                    getMailAddress();
                    return;
                }else{
                    requestGET_ACCOUNTSPermission();
                }
    
            }
    

    // check have you already run-time permission for marshmallow or not.

    private boolean isGETACCOUNTSAllowed() {
            //Getting the permission status
            int result = ContextCompat.checkSelfPermission(this, Manifest.permission.GET_ACCOUNTS);
    
            //If permission is granted returning true
            if (result == PackageManager.PERMISSION_GRANTED)
                return true;
    
            //If permission is not granted returning false
            return false;
        }
    
    
     //if you don't have the permission then Requesting for permission
       private void requestGET_ACCOUNTSPermission(){
    
            if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.GET_ACCOUNTS)){
    
    
            }
    
            //And finally ask for the permission
            ActivityCompat.requestPermissions(this,new String[]{android.Manifest.permission.GET_ACCOUNTS},REQUEST_GET_ACCOUNT);
        }
    

    // at last check onRequestPermissionsResult @Override method for checking user allow permission or not. if allow then possibleEmail is your mail address.

        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    
            //Checking the request code of our request
            if(requestCode == REQUEST_GET_ACCOUNT){
    
                //If permission is granted
                if(grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
    
    
                    Toast.makeText(this,"Thanks You For Permission Granted ",Toast.LENGTH_LONG).show();
    
               getMailAddress();
    
                }else{
                    //Displaying another toast if permission is not granted
                    Toast.makeText(this,"Oops you just denied the permission",Toast.LENGTH_LONG).show();
                }
            }
    
    }
    
    
    public void getMailAddress(){
    
              String possibleEmail = null;
    
                Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
                Account[] accounts = AccountManager.get(context).getAccountsByType(
                        "com.google");
                for (Account account : accounts) {
                    if (emailPattern.matcher(account.name).matches()) {
                        possibleEmail = account.name;
                        Log.i("MY_EMAIL_count", "" + possibleEmail);
                    }
                }
    
    }
    
    0 讨论(0)
提交回复
热议问题