Intereting Posts
Преобразование текста в растровое (Pixel) на Android Запустить приложение для Android от ссылки браузера Как подключиться к VPN, который уже настроен на Android-телефоне, программно Как построить APK и отдельные библиотеки, которые приложение загружает динамически Установка Android apk программно как часть тестовой среды Как считать шаг с помощью акселерометра в android Добавить EditText на панель инструментов Реальные устройства Android xxx-hdpi Динамически заменить applicationId в файле file_paths.xml Отправить текстовый тег для Instagram с помощью моего приложения для Android Android – уведомления о выпуске GCM не отображаются в списке уведомлений Добавление большого изображения в навигационный ящик (SlidingMenu libs) – Как это сделать? Пользовательская настройка EditText и обратной кнопки Android GridLayoutManager – как автоподстроить столбцы? Как изменить изображение кнопки при каждом нажатии?

Получить номер телефона для связи с URI в Android

Я пытаюсь получить номер телефона контакта после того, как я получил свой идентификационный номер из встроенного действия. Однако всякий раз, когда я запрашиваю базу данных с помощью курсора в моем коде ниже, я получаю нулевые строки, даже если есть номер мобильного телефона для выбранного контакта.

Может ли кто-нибудь указать мне в лучшем направлении или показать пример того, как получить номер телефона контакта ПОСЛЕ получения их идентификатора пользователя?

Мой код:

private Runnable getSMSRunnable() { return new Runnable() { public void run() { Intent i = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI); startActivityForResult(i, CONTACTS_REQUEST_CODE); } }; } 

Возвращает вывод журнала

 content://com.android.contacts/data/6802 

Из которого я передаю ID (6802) в метод, который предназначен для возврата номера телефона из идентификатора с данным типом (в этом случае ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)

 public static String getContactPhoneNumberByPhoneType(Context context, long contactId, int type) { String phoneNumber = null; String[] whereArgs = new String[] { String.valueOf(contactId), String.valueOf(type) }; Log.d(TAG, String.valueOf(contactId)); Cursor cursor = context.getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? and " + ContactsContract.CommonDataKinds.Phone.TYPE + " = ?", whereArgs, null); int phoneNumberIndex = cursor .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER); Log.d(TAG, String.valueOf(cursor.getCount())); if (cursor != null) { Log.v(TAG, "Cursor Not null"); try { if (cursor.moveToNext()) { Log.v(TAG, "Moved to first"); Log.v(TAG, "Cursor Moved to first and checking"); phoneNumber = cursor.getString(phoneNumberIndex); } } finally { Log.v(TAG, "In finally"); cursor.close(); } } Log.v(TAG, "Returning phone number"); return phoneNumber; } 

Который возвращает null для номера телефона, что означает, что он не может найти строку, к которой я пытаюсь обратиться, – что означает, что что-то не так с моим запросом – однако, если я проверяю контакт с номером мобильного телефона – как Я могу получить запрос строки 0?

Любая помощь будет принята с благодарностью. Спасибо огромное!

Solutions Collecting From Web of "Получить номер телефона для связи с URI в Android"

Я нашел ответ.

Причина, по которой я не получал никаких строк из курсора, заключалась в том, что я использовал строку

 ContactsContract.CommonDataKinds.Phone.CONTACT_ID 

«Идентификатор строки в таблице« Контакты », к которой относятся эти данные».

Поскольку я получал URI из таблицы контактов в любом случае – это не было необходимо, и следующее должно было быть заменено. Идентификатором был тот, который соответствует контакту в телефонной таблице, а не сырым контактом.

 ContactsContract.CommonDataKinds.Phone._ID 

Обмен строк возвращал правильные результаты в запросе. На данный момент все работает хорошо.

Это должно работать (возможно, попробуйте потерять тип)

Номера телефонов хранятся в их собственной таблице, и их необходимо запрашивать отдельно. Чтобы запросить таблицу телефонных номеров, используйте URI, хранящийся в переменной SDK ContactsContract.CommonDataKinds.Phone.CONTENT_URI. Используйте WHERE, чтобы получить номера телефонов для указанного контакта.

  if (Integer.parseInt(cur.getString( cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { Cursor pCur = cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null); while (pCur.moveToNext()) { // Do something with phones } pCur.close(); } 

Выполните второй запрос к базе данных SQLite для контактов Android. Номера телефонов запрашиваются против URI, хранящихся в ContactsContract.CommonDataKinds.Phone.CONTENT_URI. Идентификатор контакта хранится в телефонной таблице как ContactsContract.CommonDataKinds.Phone.CONTACT_ID, а предложение WHERE используется для ограничения возвращаемых данных.