How to get the Android device's primary e-mail address

后端 未结 12 2307
借酒劲吻你
借酒劲吻你 2020-11-21 13:30

How do you get the Android\'s primary e-mail address (or a list of e-mail addresses)?

It\'s my understanding that on OS 2.0+ there\'s support for multiple e-mail add

12条回答
  •  盖世英雄少女心
    2020-11-21 13:59

    Android locked down GET_ACCOUNTS recently so some of the answers did not work for me. I got this working on Android 7.0 with the caveat that your users have to endure a permission dialog.

    AndroidManifest.xml

    
    

    MainActivity.java

    package com.example.patrick.app2;
    import android.content.pm.PackageManager;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.content.ContextCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.accounts.AccountManager;
    import android.accounts.Account;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.*;
    
    public class MainActivity extends AppCompatActivity {
    
        final static int requestcode = 4; //arbitrary constant less than 2^16
    
        private static String getEmailId(Context context) {
            AccountManager accountManager = AccountManager.get(context);
            Account[] accounts = accountManager.getAccountsByType("com.google");
            Account account;
            if (accounts.length > 0) {
                account = accounts[0];
            } else {
                return "length is zero";
            }
            return account.name;
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            switch (requestCode) {
                case requestcode:
                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    
                        String emailAddr = getEmailId(getApplicationContext());
                        ShowMessage(emailAddr);
    
                    } else {
                        ShowMessage("Permission Denied");
                    }
            }
        }
    
        public void ShowMessage(String email)
        {
            AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
            alertDialog.setTitle("Alert");
            alertDialog.setMessage(email);
            alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                        }
                    });
            alertDialog.show();
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            Context context = getApplicationContext();
    
            if ( ContextCompat.checkSelfPermission( context, android.Manifest.permission.GET_ACCOUNTS )
                    != PackageManager.PERMISSION_GRANTED )
            {
                ActivityCompat.requestPermissions( this, new String[]
                                {  android.Manifest.permission.GET_ACCOUNTS  },requestcode );
            }
            else
            {
                String possibleEmail = getEmailId(getApplicationContext());
                ShowMessage(possibleEmail);
            }
        }
    }
    

提交回复
热议问题