2016-11-28 8 views
0

Я пытаюсь получить номер от имени контакта. Для получения контактного имени владельца я использовал следующий метод.Невозможно найти номер из отображаемого имени в android

public String getName() { 
    String name = ""; 
    Cursor c = this.getContentResolver().query(ContactsContract.Profile.CONTENT_URI, null, null, null, null); 
    int count = c.getCount(); 
    String[] columnNames = c.getColumnNames(); 
    boolean b = c.moveToFirst(); 
    int position = c.getPosition(); 
    if (count == 1 && position == 0) { 
     name = c.getString(c.getColumnIndex("display_name")); 

    } 
    c.close(); 
    return name; 
} 

Этот метод работает нормально. Он возвращает правильное имя.

После этого я пытаюсь получить Number из имени, но число курсоров всегда равно нулю. вот мой код, чтобы получить номер от имени.

public String getNumber(String name) { 
    String number = null; 
    ContentResolver cr = getContentResolver(); 
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
      "display_name = '" + name + "'", 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()) { 
      number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

     } 
     phones.close(); 
    } 
    cursor.close(); 
    return number; 
} 

Я также добавил разрешения в файле манифеста

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.READ_PROFILE"/> 
<uses-permission android:name="android.permission.READ_CONTACTS"/> 

Я не знаю, где я сделал ошибку. Пожалуйста помоги.

ответ

0

Проверьте это. Надеюсь, это решает вашу проблему.

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
    startActivityForResult(intent, 1); 

    @Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 1) { 
     if (resultCode == RESULT_OK) { 
      Uri contactData = data.getData(); 
      contactNumber = ""; 
      Cursor cursor = getContentResolver().query(contactData, null, null, null, null); 
      cursor.moveToFirst(); 
      String hasPhone = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
      String contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 
      if (hasPhone.equals("1")) { 
       Cursor phones = getContentResolver().query 
         (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
           ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
             + " = " + contactId, null, null); 
       while (phones.moveToNext()) { 
        contactNumber = phones.getString(phones.getColumnIndex 
          (ContactsContract.CommonDataKinds.Phone.NUMBER)).replaceAll("[-() ]", ""); 
        contactName=phones.getString(phones.getColumnIndex 
          (ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 


       } 
       phones.close(); 
       //Do something with number 
       if (contactNumber!=null){ 

Toast.makeText(getApplicationContext(),contactNumber,Toast.LENGTH_LONG).show(); 
       } 
      } else { 
       Toast.makeText(getApplicationContext(), "This contact has no phone number", Toast.LENGTH_LONG).show(); 
      } 
      cursor.close(); 
     } 

    } 

Также, если ОС Android является проверкой маршира для получения разрешений и разрешения на получение разрешений.

public void askPermission() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (checkSelfPermission(Manifest.permission.CALL_PHONE) 
       != PackageManager.PERMISSION_GRANTED) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       ActivityCompat.requestPermissions(CallClass.this, 
         new String[]{Manifest.permission.CALL_PHONE}, 
         1); 
      } 

      // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
      // app-defined int constant 

      return; 
     } 
    } 

} 

ли сказать мне, если это решить вашу проблему :)

+0

нет никакой разницы между этой должностью и вашим ответ предыдущей ссылкой http://stackoverflow.com/a/40846529/7007823 –

+0

Проверьте это http://stackoverflow.com/a/11405571/7007823 – UserDev

+0

код выглядит правильно, но не совпадает с именем профиля профиля с указанным именем. Я не знаю почему. –

 Смежные вопросы

  • Нет связанных вопросов^_^