代码之家  ›  专栏  ›  技术社区  ›  nikib3ro

如何获得Android用户的电子邮件地址?

  •  33
  • nikib3ro  · 技术社区  · 15 年前

    我有 android.permission.READ_OWNER_DATA

    2 回复  |  直到 9 年前
        1
  •  91
  •   Jim Blackler    15 年前

    你为什么要这么做?

    import android.accounts.Account;
    import android.accounts.AccountManager;
    import android.content.Context;
    
    /**
     * This class uses the AccountManager to get the primary email address of the
     * current user.
     */
    public class UserEmailFetcher {
    
      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;
      }
    }
    

    在AnroidManifest.xml中

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    
        2
  •  2
  •   Zia    5 年前

    请在清单文件中添加此权限。

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    

        public void getAccounts() {
            StringBuilder emailAccounts = new StringBuilder();
    
            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}, 1);
                } else {
                    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.GET_ACCOUNTS}, 1);
                }
            }
            else {
                List<String> accountList = new ArrayList<String>();
                Pattern gmailPattern = Patterns.EMAIL_ADDRESS;
                Account[] accounts = AccountManager.get(this).getAccounts();
                for (Account account : accounts) {
                    if (gmailPattern.matcher(account.name).matches()) {
                        emailAccounts.append(flag + ". " + "<b>" + account.name + "<br>" +
                                "---------" + "---------<br>"); ;
                    }
                }
                deviceDetails.setText(Html.fromHtml(emailAccounts+""));
            }
        }

    现在像这样在onCreate()方法中调用这个函数。

        3
  •  1
  •   Community CDub    5 年前

    制作棉花糖版本

    btn\u click=(Button)findViewById(R.id.btn\u click);

    btn_click.setOnClickListener(new View.OnClickListener() {
    
        @Override
        public void onClick(View arg0)
        {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
            {
                int permissionCheck = ContextCompat.checkSelfPermission(PermissionActivity.this,
                        android.Manifest.permission.CAMERA);
                if (permissionCheck == PackageManager.PERMISSION_GRANTED)
                {
                    //showing dialog to select image
                    String possibleEmail=null;
    
                     Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
                     Account[] accounts = AccountManager.get(PermissionActivity.this).getAccounts();
                     for (Account account : accounts) {
                         if (emailPattern.matcher(account.name).matches()) {
                             possibleEmail = account.name;
                             Log.e("keshav","possibleEmail"+possibleEmail);
                         }
                     }
    
                    Log.e("keshav","possibleEmail gjhh->"+possibleEmail);
                    Log.e("permission", "granted Marshmallow O/S");
    
                } else {                        ActivityCompat.requestPermissions(PermissionActivity.this,
                            new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE,
                                    android.Manifest.permission.READ_PHONE_STATE,
                                    Manifest.permission.GET_ACCOUNTS,
                                    android.Manifest.permission.CAMERA}, 1);
                }
            } else {
    

    //低于棉花糖

                    String possibleEmail=null;
    
                     Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
                     Account[] accounts = AccountManager.get(PermissionActivity.this).getAccounts();
                     for (Account account : accounts) {
                         if (emailPattern.matcher(account.name).matches()) {
                             possibleEmail = account.name;
                             Log.e("keshav","possibleEmail"+possibleEmail);
                     }
                    Log.e("keshav","possibleEmail gjhh->"+possibleEmail);
            }
        }
    });
    

        4
  •  -1
  •   Pedro Machado    4 年前

    我找到了解决办法

    startActivityForResult(intent, ANY_CODE);
    
    @Override
        protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == ANY_CODE&& resultCode == RESULT_OK) {
                String emailAddress = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
                // do something...
            }
        }