如何使用主要联系号码启动拨号器?

时间:2011-01-20 14:14:07

标签: android android-contacts

任何人都可以帮助我实现以下目标,

如果在之前的活动中通过'ACTION_PICK'已经获得的联系人获得了Uri,我想发起一个ACTION_DIAL意图来呼叫该联系人。

不知道如何解决这个问题,我是否首先需要查询以查找与联系人关联的主号码,或者是否有更简单的方法?我希望我可以用联系人的Uri启动ACTION_DIAL,它会找出自己做什么,但这不起作用。

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

PS此代码适用于Froyo以上,因此使用ContactsContract不是较旧的东西。

谢谢,

3 个答案:

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

www.dbws.net

答案 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" />
清单文件中的