1

谁能帮我实现以下目标,

给定在先前活动期间通过“ACTION_PICK”获得的联系人的 Uri,我想启动 ACTION_DIAL 意图来呼叫联系人。

不知道该怎么做,我首先需要查询以找到与联系人关联的主要号码还是有更简单的方法?我希望我可以使用联系人的 Uri 启动 ACTION_DIAL,它会自己弄清楚要做什么,但这不起作用。

一如既往地感谢您的建议。

PS 此代码适用于 Froyo 及更高版本,因此使用 ContactsContract 而不是旧的东西。

谢谢,

4

3 回答 3

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)));
        }

www.dbws.net

于 2011-01-23T22:02:38.780 回答
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);
于 2011-01-20T14:24:59.030 回答
0

不要忘记添加

<uses-permission android:name="android.permission.CALL_PHONE" />

在清单文件中

于 2013-03-13T09:54:48.750 回答