使用ContentProvider从Android获取电话号码 - Android

The*_*heo 5 android android-contacts

我正在制作一个小应用程序,我可以使用内容提供商获取手机的联系人,并将其显示在列表视图中,如图所示.

在此输入图像描述

我想选择列表视图的一行,并自动拨打该特定联系人的电话.我尝试了一些东西,但它们不起作用.有任何想法吗?这是我的代码.

public class MainActivity extends ListActivity implements AdapterView.OnItemClickListener{
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ContentResolver cr = getContentResolver();
    Cursor c = cr.query(ContactsContract.Contacts.CONTENT_URI,
            new String[] {ContactsContract.Contacts.DISPLAY_NAME},
            null, null, null);

    List<String> contacts = new ArrayList<String>();
    if (c.moveToFirst()) {
        do {
            contacts.add(c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
        } while (c.moveToNext());
    }
    adapter = new ArrayAdapter<String>(this, R.layout.activity_main, contacts);
    setListAdapter(adapter);



}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

      //The answer should be inside here.

  }
}
Run Code Online (Sandbox Code Playgroud)

Raj*_*sar 5

首先,确保您已将 Permission 添加到 AndroidManifest.xml 文件中:

<uses-permission android:name="android.permission.READ_CONTACTS"/>
Run Code Online (Sandbox Code Playgroud)

更新:在 Android 6 及更高版本上,说明清单中的权限不够,您必须明确要求用户授予读取联系人的权限,否则您将收到异常。有关更多详细信息,请参阅此答案。

然后你可以像这样循环浏览你的手机联系人:

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
while (cursor.moveToNext()) { 
    String contactId = cursor.getString(cursor.getColumnIndex( 
    String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

    if (Boolean.parseBoolean(hasPhone)) { 
        // You know it has a number so now query it like this
        Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); 
        while (phones.moveToNext()) { 
            String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER));                 
        } 
        phones.close(); 
    }

    Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null); 

    while (emails.moveToNext()) { 
        // This would allow you get several email addresses 
        String emailAddress = emails.getString( 
        emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
    } 

    emails.close();
}
Run Code Online (Sandbox Code Playgroud)