私の小さなテスト アプリは、連絡先ピッカーを使用して 1 つの連絡先を選択します。
final Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(contactPickerIntent, PICK_CONTACT);
onActivityResult メソッドで結果を解析すると、次のようになりcontent://com.android.contacts/data/7557
ます。次に、この uri にクエリを実行して、その名前とルックアップ キーを取得します。
final String[] projection = new String[] {
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY };
final Cursor c = getContentResolver().query(contactUri, projection, null, null, null);
if (c.moveToFirst()) {
final String name = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
final String lookupKey = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY));
Log.d(TAG, "picked contact, name: " + name + ", lookup key: " + lookupKey);
}
正常に機能しますが、一部の連絡先では機能しません。一部の連絡先では、空のカーソルが表示されます。他の質問を調べました。これには、連絡先のクエリで同じ問題があるようです-SOMETIMESは空のカーソルを返します(ただし、回答はありません)。この質問で提案されている解決策のアプローチを試してみました。Retrieve Contact Phone Number From URI in Android :
final String id = contactUri.getLastPathSegment();
final String[] whereArgs = new String[] { id };
final Cursor c2 = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone._ID + " = ?", whereArgs, null);
if (c2.moveToFirst()) {
final String name = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
final String lookupKey = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY));
}
残念ながら、問題は残ります。一部の連絡先では空のカーソルが表示されます。私は何を間違っていますか?助けてくれてありがとう。