私はプロジェクトに取り組んでおり、EditTextにユーザーのプライマリメールを自動的に入力する必要があります。プライマリメールをGooglePlayストアに関連付けられたメールと見なしています。私は this postを読み、それを実装しました、
メールIDを取得するためにAccountManagerクラスを使用している場合、その電話に追加されたすべてのメールIDを取得するため、それは不可能であり、AccountManagerによって返された最初のメールIDを取得するように言われますが、初めて電話に追加されたメールID。
つまり、test @ gmail.comを追加し、それをgoogle playにリンクしたとします。後で、test_new @ gmail.comを追加し、このアカウントをPlayストアに関連付けました。現在、このアカウントでPlayストアを使用しています。次のようにコードを書いた場合;
Account[] accountList = AccountManager.get(this).getAccountsByType("com.google");
Log.d("Play Store account:" , accountList[0].name);
ステートメントの予想される出力は[email protected]ですが、test @ gmail.comを取得しています
この問題を解決する方法はありますか?
私があなたのアイデアを提供するのを手伝ってください。
私が読んだ限りでは、AndroidにはプライマリメールIDの概念はありません。また、Playストアに関連付けられている電子メールIDを取得する方法はありません。つまり、すべてのGmail IDを取得し、最後のIDを取得しました。これは、メインのメールIDではありませんが、彼のデバイスに最初に追加されたGoogleアカウントである必要があります。そのため、通常の使用例では、ユーザーは最初に追加した電子メールIDで遊ぶことはありません。したがって、プライマリメールIDと見なすことができます。
@driodevに同意します。しかし、私は別のアプローチでそれを行いました。コードをコピーして貼り付けるだけです...私はこの質問に少し遅れて答えるかもしれませんが、これは将来多くの人に役立つことを保証します。実際、getAccount( "com.example")の文字列を変更するだけで、Androidデバイスで使用されるアカウントIDを取得できると思います)。コードは次のとおりです。
String User_EmailId = getEmiailID(getApplicationContext());
private String getEmailID(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;
}
`
「Playストアに関連付けられている」アカウントは、Playアプリのアプリ設定にすぎません。あなたはそれを読むことができません。ユーザーは、testを使用するアプリと、test_newを使用するアプリをダウンロード/購入できます。
@ MohammedNatharの回答へのいくつかの追加。 Android 6.0以降では、このバージョンは偏執的であるため、権限をリクエストすることを忘れないでください。
マニフェスト:
<uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
<uses-permission Android:name="Android.permission.READ_CONTACTS" />
リクエスト:
private void requestPermissions(Activity activity) {
if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.GET_ACCOUNTS}, 101);
return null;
}
}
そして活動
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
boolean result = false;
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
result = true;
switch (requestCode) {
case 101:
if (result) Log.d(Constants.LOG, "Permission GET_ACCOUNTS granted");
break;
}
}
または、必要に応じて1つの「if」でそれを行うことができます。
ユーザーがemail_idを割り当てるたびに、Android Emailでカレンダーを作成します。したがって、上記の解決策がうまくいかない場合は、これをハックとして試すことができます。Calendarに関連付けられたEメールを見つけてください。これが役立つことを願っています。
public String getCalendarIdAndEmail(Context c) {
String projection[] = {"_id", "calendar_displayName"};
// Uri calendars = Uri.parse("content://com.Android.calendar/calendars");
String calID = null;
try {
ContentResolver contentResolver = c.getContentResolver();
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
return calID;
}
Cursor managedCursor = contentResolver.query(CalendarContract.Calendars.CONTENT_URI, projection, CalendarContract.Calendars.VISIBLE + " = 1 AND " + CalendarContract.Calendars.IS_PRIMARY + "=1", null, CalendarContract.Calendars._ID + " ASC");
if (managedCursor.getCount() <= 0) {
managedCursor = contentResolver.query(CalendarContract.Calendars.CONTENT_URI, projection, CalendarContract.Calendars.VISIBLE + " = 1", null, CalendarContract.Calendars._ID + " ASC");
} else {
Log.d("getCount", "" + managedCursor.getCount());
}
if (managedCursor.moveToFirst()) {
int nameCol = managedCursor.getColumnIndex(projection[1]);
int idCol = managedCursor.getColumnIndex(projection[0]);
do {
String calName = managedCursor.getString(nameCol);
calID = managedCursor.getString(idCol);
//CalName is Email id you are looking for
Log.e("tag", "calName " + calName + "____calId " + calID);
} while (managedCursor.hasNext());//managedCursor.moveToNext());
managedCursor.close();
}
} catch (Exception e) {
Log.e("error", e.getMessage(););
}
return calID;
}