ContactsContract не возвращает номер телефона, но имя
Я использовал этот код для отображения имени и номера телефона моего телефона, хотя он возвращает только имя, я был бы признателен за любой ответ. это также работает, если я синхронизировал учетную запись Google?
КОД: открытый класс MainActivity расширяет ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (people != null && people.moveToFirst()) {
do {
try {
int nameFieldColumnIndex = people.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
String contact = people.getString(nameFieldColumnIndex);
Log.d("CONTACT: ", contact);
int numberFieldColumnIndex = people.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
String number = people.getString(numberFieldColumnIndex);
Log.d("NUMBER: ", number);
} catch (Exception e) {
Log.e("ERROR: ", e.toString());
}
} while (people.moveToNext());
}
}
ОШИБКА:
04-16 05:16:27.839 1426-1426/com.chatter.contactsaccess D/CONTACT:﹕ Test
04-16 05:16:27.839 1426-1426/com.chatter.contactsaccess D/NUMBER:﹕ 1
РЕДАКТИРОВАНИЕ
3 ответа
Вы можете попробовать следующий код, чтобы получить все телефонные контакты в вашем телефоне.
В onCreate вашей деятельности передайте намерение открыть телефонные контакты, как,
private static final int PICK_CONTACT=1;
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);
И получить подробную информацию о выбранном контакте в onAcctivityResult, как показано ниже
public void onActivityResult(int reqCode, int resultCode, Intent data) {
if(reqCode==0)return;
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
ContentResolver cr=getActivity().getContentResolver();
final Cursor c = cr.query(contactData, null, null, null, null);
if (c.moveToFirst()) {
ArrayList<String> alNumbers=new ArrayList<>();
String id =c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
String hasPhone =c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (hasPhone.equalsIgnoreCase("1")) {
Cursor phones = getActivity().getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,
null, null);
if(phones.moveToFirst())
{
while(!phones.isAfterLast())
{
cNumber = phones.getString(phones.getColumnIndex("data1"));
alNumbers.add(cNumber);
phones.moveToNext();
}
}
phones.close();
final CharSequence[] items = alNumbers.toArray(new String[alNumbers.size()]);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Choose a number");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
cNumber = items[item].toString();
name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
phone.setText(name+" ("+cNumber+")");
}
});
AlertDialog alert = builder.create();
if(alNumbers.size() > 1) {
alert.show();
}
name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
Я исправил это, изменив ContactsContract.Contacts.CONTENT_URI
за ContactsContract.CommonDataKinds.Phone.CONTENT_URI
следующий код (я просто хочу получить имя и телефон в строке):
Cursor people = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
while(people.moveToNext()) {
int nameFieldColumnIndex = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
String contact = people.getString(nameFieldColumnIndex);
int numberFieldColumnIndex = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
String number = people.getString(numberFieldColumnIndex);
Log.e("CONTACT: ", contact + " " + number);
}
people.close();
Здесь нет
ContactsContract.PhoneLookup.NUMBER
присутствует в
ContactsContract.Contacts.CONTENT_URI
использовать
ContactsContract.Contacts.HAS_PHONE_NUMBER
http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html
String name = c=.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));