2015-09-08 29 views
11

私はプロジェクトに取り組んでおり、EditTextにユーザーのプライマリ電子メールを自動的に入力する必要があります。私は、Googleプレイストアに関連付けられた電子メールとしてプライマリ電子メールを検討しています。私はthisの投稿を読んでこれを実装しました。アンドロイド携帯電話のプライマリ電子メールアカウントを取得

電子メールIDを取得するためにAccountManagerクラスを使用している場合、その電話機に追加されたすべての電子メールIDが取得されるため、できません。 AccountManagerから返された最初の電子メールIDですが、電話機で初めて追加された電子メールIDが返されます。

つまり 私は[email protected]を追加してGoogle Playとリンクして、後で[email protected]を追加してこのアカウントをプレイストアに関連付けたとします。このアカウントでプレイストアを使用しています。私が次のようにコードを書いていれば、予想外のステートメントのために入れ

 Account[] accountList = AccountManager.get(this).getAccountsByType("com.google"); 
    Log.d("Play store account:" , accountList[0].name); 

[email protected]ですが、私は[email protected]

を取得していますこの問題を解決する方法はありますか?

あなたのアイデアを寄せてください。

+1

期待されているのは、[email protected]ですが、[email protected]です。 –

+0

タイプミス、期待される出力はPlayストアに関連付けられた電子メールIDで、ここではそれはあなたがthis..itは[こちら]すでに回答されている試すことができます[email protected] – droidev

+1

である[1] [1] :http://stackoverflow.com/questions/2112965/how-to-get-the-android-devices-primary-e-mail-address – Thiyagu

答えて

7

私が読んだ限り、アンドロイドにはプライマリ電子メールIDの概念はありません。プレイストアに関連付けられた電子メールIDを取得する方法はありません。私がしたことは、すべてのGmail IDを取得し、最後のメールIDを取得したことです。メインのメールIDではありませんが、デバイスに最初に追加されたGoogleアカウントにする必要があります。したがって、通常のユースケースでは、ユーザは最初に追加された電子メールIDで遊ぶことはありません。プライマリメールIDと見なすことができます。

2

「Playストアに関連付けられた」アカウントは、Playアプリのアプリの設定にすぎません。あなたはそれを読むことはできません。ユーザーはテストでいくつかのアプリをダウンロード/購入することができ、test_newでいくつかのアプリをダウンロード/購入することができました。

1

私は@driodevに同意します。しかし、私は別のアプローチでそれをやりました。 ちょうどコピーし、コードを貼り付けて....私は少し遅くこの質問に答えるかもしれないが、私はこれがfuture.infactの多くに全面的な助けになることを保証する私はアンドロイドデバイスで使用されているアカウントidを得ることができると思うgetaccount( "com.example")内の文字列を変更してください。ここにコードがあります。

String User_EmailId = getEmiailID(getApplicationContext()); 

private String getEmiailID(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; 
}  

`

+0

私はこれを試しましたが、なぜ私はそれを印刷すると自分のAndroidデバイスでnullを取得していますか?私のデバイスは1つのGoogleアカウント、gmail上でのみ動作しています。 – DaveNOTDavid

+0

マニフェストに権限を追加しました!上記の「com.google」で、誤字をチェックしましたか?「com.gogle」としていましたが、どこに問題があるのか​​わかりませんでした。コードスニペット –

+0

これはマニフェストのパーミッションである必要があります。

0

MohammedNatharの答え@にいくつかの追加。上記のAndroid 6.0とでは、アクセス権を要求することを忘れないでください、このバージョンでは、いくつかのparanoicあるので:

マニフェスト:

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

または、「if」を1つ使用してあなたは欲しい。

0

ユーザがemail_idを割り当てると、アンドロイドは電子メールでカレンダーを作成します。上記の解決策があなたには役に立たない場合は、ハックとして試すことができます。 カレンダーに関連付けられた電子メールを検索します。 これが役立つことを願っています。

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; 
} 
関連する問題