任何人都可以帮助我实现以下目标,
如果在之前的活动中通过'ACTION_PICK'已经获得的联系人获得了Uri,我想发起一个ACTION_DIAL意图来呼叫该联系人。
不知道如何解决这个问题,我是否首先需要查询以查找与联系人关联的主号码,或者是否有更简单的方法?我希望我可以用联系人的Uri启动ACTION_DIAL,它会找出自己做什么,但这不起作用。
一如既往地感谢您的建议。
PS此代码适用于Froyo以上,因此使用ContactsContract不是较旧的东西。
谢谢,
答案 0 :(得分:3)
为了其他人的利益,使用从ACTION_PICK意图获得的联系人的URI启动ACTION_DIAL / ACTION_CALL意图不起作用。这是一个无效的参数。
所以我必须通过几个查询来确定联系人的电话号码。我也只是寻找“小学”电话。
我执行任务的代码如下所示,也许我不需要进行初始查询来获取ID,因为我已经拥有了URI但是我还没有找到替代方案,所以如果有人可以另外建议请让我知道:-),
// passing in String uri - obtained via contacts based ACTION_PICK
String contactId = null;
Cursor contactCursor = callingActivity.managedQuery(Uri.parse(uri), null, null, null, null);
if (contactCursor.moveToFirst())
{
contactId =
contactCursor.getString(contactCursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
}
Cursor c = callingActivity.managedQuery(Data.CONTENT_URI,
new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL},
Data.CONTACT_ID + "=?" + " AND "
+ Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE
+ "' AND " + Phone.IS_PRIMARY + " != 0",
new String[] {contactId}, null);
if (c.moveToNext()) {
result = c.getString(c.getColumnIndexOrThrow(Phone.NUMBER));
if (DEBUG) Log.d(TAG, "GOT PHONE : "+c.getString(c.getColumnIndexOrThrow(Phone.NUMBER)) + ","
+c.getString(c.getColumnIndexOrThrow(Phone.LABEL)) + ","
+c.getString(c.getColumnIndexOrThrow(Phone.TYPE)));
}
答案 1 :(得分:2)
它会帮助你,
Intent myintent = new Intent(Intent.ACTION_CALL);
Log.v("phno",""+phNo);
myintent.setData(Uri.parse("tel:" +phNo ));
myintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myintent);
答案 2 :(得分:0)
不要忘记添加
<uses-permission android:name="android.permission.CALL_PHONE" />
清单文件中的