Отображение контактов только с телефонными номерами с помощью action PICK intent в Android-устройстве
моя цель-отображать только контакты с номером телефона для пользователя и позволить пользователю выбрать несколько контактов, которые я хочу сохранить локально.
я использовал различные варианты вместо ContactsContract.Контакты.CONTENT_URI в методе ниже. Но я получаю много много контактов (Многие из них являются мусором только с идентификаторами электронной почты).
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_selector);
((Button)findViewById(R.id.btnphonecontactlist)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent contactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(contactIntent, 1);
}
});
}
Если я передаю ContactsContract.Контакты.CONTENT_URI в качестве параметра для вышеуказанного метода и в случае метода обработчика ниже, строка[] для метод запроса как параметры проекции (которые показаны в комментариях), метод терпит неудачу с java.ленг.IllegalArgumentException. Если я передам null в методе ниже, то какой бы контакт я ни выбрал, я не найду никакой столбец, связанный с номером телефона или электронной почтой.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(data != null)
{
Uri uri = data.getData();
if(uri != null)
{
Cursor c = null;
try
{
c = getContentResolver().query(uri, null
// new String[] {
//ContactsContract.CommonDataKinds.Phone.NUMBER,
//ContactsContract.CommonDataKinds.Phone.TYPE},
, null, null, null);
if(c != null && c.moveToFirst())
{
String number = c.getString(0);
String type = c.getString(1);
}
}
finally
{
if(c != null && !c.isClosed())
c.close();
}
}
}
}
есть ли способ отображать только контакты, видимые пользователю обычно, когда пользователь переходит к телефонной книге и у которого есть номера телефонов?
Я попытался пройти через все потоки в stackoverflow и других сайты, но не смогли найти никакого решения, которое решит проблему вокруг этого, хотя многие люди опубликовали проблему. Я не много работал с платформой Android, и я, возможно, пропустил некоторые незначительные детали, и я считаю, что должен быть простой способ достичь этого.
любезно предлагаю. Спасибо за помощь.
спасибо.
5 ответов
пожалуйста, используйте ниже код
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, 1);
*-> Add a permission to read contacts data to your application manifest.
<uses-permission android:name="android.permission.READ_CONTACTS"/>
-> Use Intent.ACTION_PICK in your Activity
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT);
-> Then Override the onActivityResult() and retrieve the ID,Phone number and Name in the data.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// check whether the result is ok
if (resultCode == RESULT_OK) {
// Check for the request code, we might be usign multiple startActivityForReslut
switch (requestCode) {
case RESULT_PICK_CONTACT:
Cursor cursor = null;
try {
String phoneNo = null ;
String name = null;
Uri uri = data.getData();
cursor = getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
int phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
phoneNo = cursor.getString(phoneIndex);
textView2.setText(phoneNo);
} catch (Exception e) {
e.printStackTrace();
}
break;
}
} else {
Log.e("MainActivity", "Failed to pick contact");
}
}
This will work check it out*
следующий код сделает то, что вы хотите.
Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(Intent.createChooser(intent, "Contact"), PICK_CONTACT);
Uri uri = Uri.parse("content://contacts");
Intent intent = new Intent(Intent.ACTION_PICK, uri);
intent.setType(Phone.CONTENT_TYPE);
startActivityForResult(intent, REQUEST_CODE);
используйте этот:
Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/people"));
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, 1);