そこで、実装を試す。そんなに難しくないとたかをくくっていた。
なんとか、取得ができたのでメモ。
まず、失敗例
String[] Projection = { Email.DISPLAY_NAME, Email.DATA }; Cursor managedQuery = getContentResolver().query(Email.CONTENT_URI,Projectionl, null, null, null); while (managedQuery.moveToNext()) { builder.append(managedQuery.getString(managedQuery. getColumnIndex(Email.DISPLAY_NAME))).append(","). append(managedQuery.getString(managedQuery.getColumnIndex(Email.DATA1))); } Log.d(TAG, builder.toString());
これを実行すると、メールアドレスの取得は出来るのだが、DISPLAY_NAMEがひたすらnullになる。それじゃあ、困る。
そこで、そもそも本当に登録名も取得できるのかを確認。
Cursor managedQuery = getContentResolver().query(Email.CONTENT_URI, null, null, null, null); StringBuilder builder = new StringBuilder(); while (managedQuery.moveToNext()) { for (int i = 0; i < managedQuery.getColumnCount(); i++) { builder.append(i).append("=").append(managedQuery.getString(i)); builder.append(","); } builder.append(managedQuery.getString(1)); builder.append("\n"); } Log.d(TAG, builder.toString());
一応 i = 31 || 33 || 57 || 59
の時に、登録名を取得できていることが確認できた。
次に
builder.append(" is ").append(managedQuery.getColumnName(i));
を挟んでみて、カラムの名前を取りに行くと
i = 31 がdisplay_name
i = 32 がdisplay_name_alt
i = 57 がsort_key_alt
i = 59 がsort_key
さて、データがあるのなら話は早い。失敗例を元に実装を行う。
String[] Projection = { "display_name", Email.DATA }; Cursor managedQuery = getContentResolver().query(Email.CONTENT_URI, Projection, null, null, null); StringBuilder builder = new StringBuilder(); while (managedQuery.moveToNext()) { builder.append(managedQuery.getString(0)); builder.append(managedQuery.getString(1)); builder.append("\n"); } Log.d(TAG, builder.toString());
これで、登録した名前とメールアドレスを取得することができた。長かったぜ・・・。
ちなみに、Email.DISPLAY_NAMEの値は公式リファレンスによると、Data4 となっているらしい。
2番目の方法で、データを全部取得した時Data4は確かにnullになっていた。確かに・・・ああ、なっていたさ・・・。
0 件のコメント:
コメントを投稿