2016-11-28 49 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; 
} 

這種方法做工精細。它返回一個正確的名字。

在此之後,我嘗試從名稱獲取數字,但我的遊標數始終爲零。這裏是我的代碼從名稱獲取數字。

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

代碼看起來正確,但不匹配配置文件聯繫人姓名提供的名稱我不知道爲什麼。 –