1
API 23の権限を持つ連絡先から電話番号を取得しようとしていますが、電話番号は常に空の文字列を返します。連絡先を取得する権限が確認され、連絡先は有効と表示されますが、連絡先の電話フィールドは存在しないようです。 "cr.query ..."は "while(phones.moveToNext)"が真に表示されないため何も返さないように見えます。 以下のコードを使用して電話番号を取得しています。連絡先に電話番号が表示されない理由は何ですか?Phone.NUMBERはすべての連絡先に対して空を返します
ContentResolver cr = getContentResolver();
cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cursor.moveToFirst()) {
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
while (phones.moveToNext()) {
String number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
int type = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
switch (type) {
case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
// do something with the Home number here...
break;
case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
PhoneNumber = number;
break;
case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
// do something with the Work number here...
break;
}
}
phones.close();
}
cursor.close();
UPDATE: わからない、なぜその方法は、作業が、作業を行う別の方法を見つかりませんでした。
Uri result = data.getData();
String id = result.getLastPathSegment();
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[] { id }, null);
int phoneIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA);
if (cursor.moveToFirst()) {
PhoneNumber = cursor.getString(phoneIdx).toString();
}
この方法は問題ありません。
ログ・猫のエラー – AndroidHacker
とあなたの完全なコードを書くことができますエラー、ちょうど空の携帯電話の文字列がありませんでした。上記の投稿を編集して、動作する方法を示しました。テストされた携帯電話はNexus 6Pで、違いがある場合に備えています。 – user2431174