1

语境:

  • 我为 android 编写了一个简单的小型拨号器,它可以拨打联系人的电话号码。
  • 我使用 Intent.ACTION_CALL 并为只有一个电话号码或首选默认号码的联系人传递“电话:”
  • 在应用程序中,我有联系人的 lookup_key,以便我可以访问联系人

问题:

我想向联系人而不是号码发起呼叫,以便 Android:

  • 如果联系人有 2 个以上的号码:将启动电话号码选择对话框,然后发起呼叫
  • 如果联系人只有 1 个号码:只需发起呼叫

我当然可以从头开始实现一个弹出窗口,但我更愿意委托标准操作,以便用户拥有与使用标准拨号器相同的用户体验。

4

1 回答 1

2

您可以使用类似这样的方法来提示用户选择联系人,然后拨打哪个电话号码(如果有多个)......而不是将其传递给拨打电话的意图:

Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, 1);

@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (resultCode == RESULT_OK) {  
    Uri contactData = data.getData();                   
    String theID = contactData.toString());

    //MAKE YOUR CALL .. do whatever... example:
    ContentResolver contentResolver = getContentResolver();
    Uri contactData = Uri.parse(theID);
    Cursor cur = contentResolver.query(contactData, null, null, null, null);
    String theNumber = cur.getString(cur.getColumnIndex("data4"));
    cur.close();

    Intent my_callIntent = new Intent(Intent.ACTION_CALL);
    my_callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
    my_callIntent.setData(Uri.parse("tel:" + theNumber));
    startActivity(my_callIntent);


    }                   

}  

它不漂亮也不完美,可能需要一些修改,只是有点想不通,但希望你能明白。

于 2013-09-25T02:46:01.453 回答