Ответ 1
Для этого вам нужно использовать ContactsProvider.
Я готовлю страницу входа для своего приложения. Я хотел сделать то же самое, что делает твиттер. Они помогают пользователю и предопределяют некоторые поля, такие как электронная почта, имя и профиль pic. Мне удалось получить электронное письмо с помощью разрешения GET_ACCOUNTS
.
Однако я не вижу, как я получаю полное имя и профиль pic?
public 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;
}
Для этого вам нужно использовать ContactsProvider.
Получить полное имя учетной записи
Сначала добавьте это разрешение в файл AndroidManifest.xml
<uses-permission
android:name="android.permission.GET_ACCOUNTS"/>
Код Java
public 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;
}
Вызов getAccount();
Account account = getAccount(AccountManager.get(context));
String accountName = account.name;
String fullName = accountName.substring(0,accountName.lastIndexOf("@"));
emailEditText.setText(accountName);
fullNameEditText.setText(fullName);
Если адрес электронной почты аккаунта -
то Name -
ABC
Поместите ниже код в свою деятельность. Вы получите то, что хотите. Это новый способ получить информацию о пользователе google.
//Global variables:
GoogleSignInOptions gso;
private GoogleApiClient mGoogleApiClient;
//inside onCreate():
gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestProfile()
.requestScopes(new Scope(Scopes.PLUS_ME))
.requestScopes(new Scope(Scopes.PLUS_LOGIN))
.requestScopes(new Scope(Scopes.PROFILE))
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this , this )
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.addApi(Plus.API)
.build();
Поместите ниже код из onCreate()
//to get google account info:
private void handleSignInResult(GoogleSignInResult result) {
Log.d(TAG, "handleSignInResult:" + result.isSuccess());
if (result.isSuccess()) {
GoogleSignInAccount acct = result.getSignInAccount();
String pic_info=null;
int g;
String gender="Null";
String userid="";
if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
userid=currentPerson.getId(); //BY THIS CODE YOU CAN GET CURRENT LOGIN USER ID
g=currentPerson.getGender();
gender = (g==1)?"Female":(g==0)?"Male":"Others";
}
if(acct.getPhotoUrl() != null) {
pic_info = acct.getPhotoUrl().toString();
Log.e("info", pic_info + " ");
}
Toast.makeText(getApplicationContext(),"welcome "+acct.getDisplayName(),Toast.LENGTH_LONG).show();
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("user", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("social_media","google");
editor.putString("id",userid);
editor.putString("email",acct.getEmail());
editor.putString("name",acct.getDisplayName());
editor.putString("profile_pic",pic_info);
editor.putString("gender",gender);
editor.apply();
Intent intent=new Intent(LoginActivity.this,SignOutActivity.class);
startActivity(intent);
finish();
}