#java #android
#java #Android
Вопрос:
Моя цель — создать список, который поступает из API, который включает в себя номера телефонов пользователей моего приложения. Поэтому мне нужно только увидеть контакты, которые есть в этом списке. Но я не знаю, как установить приведенный ниже код для этого. Я имею в виду, что ниже он открывает контакты со всеми контактами, которые есть в телефоне. Мне не нужно видеть все контакты, кроме тех, которые есть в данном списке
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(contactPickerIntent,1);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case 1 :
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(contactData, null, null, null, null);
if (cur.getCount() > 0) {// thats mean some resutl has been found
if(cur.moveToNext()) {
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.e("Names", name);
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
{
// Query phone here. Covered next
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID " = " id,null, null);
while (phones.moveToNext()) {
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.e("Number", phoneNumber);
}
phones.close();
}
}
}
cur.close();
}
break;
}
}
Комментарии:
1. Итак, вы пытаетесь получить контакты, которые являются общими в ответе API и ContentResolver, в какой-то список?
2. @rajan. кали точно
Ответ №1:
Подумайте, что у вас уже есть a list
, в котором есть данные из API, и создайте новый список, в котором будут общие элементы из API list
и ContentResolver
, теперь, чтобы добавить элементы в нужный вам список, ContentResolver
проверьте, есть ли PhoneNumber
в списке API, прежде чем добавлять его в вывод.
ArrayList<String> apiPhoneNumbers;// this data is populated by API
ArrayList<String> commonPhoneNumbers = new ArrayList<>();
//inside onActivityResult
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0){
// Query phone here. Covered next
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID " = " id,null, null);
while (phones.moveToNext()) {
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.e("Number", phoneNumber);
if(apiPhoneNumbers.contains(phoneNumber)){//add to output only if it is in API list
commonPhoneNumbers.add(phoneNumber);
}
}
phones.close();
}
Комментарии:
1. это решение для выбора контактов после контакта. Что мне нужно, так это то, что намерение, открывающее приложение контактов, будет иметь только числа, поступающие из ответа api. Я не смог найти никакого решения, поэтому я не знаю, возможно ли это. Спасибо за ответ, приятель