Android:联系人选择器意图 |无法实例化类型 Uri

Posted

技术标签:

【中文标题】Android:联系人选择器意图 |无法实例化类型 Uri【英文标题】:Android: Contact Picker Intent | Cannot instantiate the type Uri 【发布时间】:2012-09-26 23:19:47 【问题描述】:

我正在尝试仅选择带有电话号码的联系人。我正在关注this code

static final int PICK_CONTACT_REQUEST = 1;  // The request code
...
private void pickContact() 
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, new Uri("content://contacts"));
    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);

但不幸的是,它显示错误:Cannot instantiate the type Uri

实际上,我还有另一个工作代码可以完美运行,但在选择电子邮件联系人时会崩溃。我只需要电话号码。

Intent intentContact = new Intent(Intent.ACTION_PICK,
                                ContactsContract.Contacts.CONTENT_URI);
intentContact.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivityForResult(intentContact, PICK_CONTACT);

onReceive(),这个方法被调用

public void getContactInfo(Intent intent) 

    ContentResolver cr = getContentResolver();
    cursor = cr.query(intent.getData(), null, null, null, null);

    while (cursor.moveToNext()) 
        String contactId = cursor.getString(cursor
                .getColumnIndex(ContactsContract.Contacts._ID));
        if (Integer
                .parseInt(cursor.getString(cursor
                        .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
            Cursor phones = getContentResolver().query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    null,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                            + " = " + contactId, null, null);
            while (phones.moveToNext()) 
                phoneNumber = phones
                        .getString(phones
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            
            phones.close();
         else 
            snipp.showAlertDialog(getApplicationContext(), "No Number",
                    "Cannot read number", false);
        

    
    cursor.close();

【问题讨论】:

【参考方案1】:

这对我有用:

private void pickContact() 
    Intent pickContactIntent = new Intent( Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI );
    pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);

编辑:

您的onActivityResult() 应如下所示:

@Override
public void onActivityResult( int requestCode, int resultCode, Intent intent ) 

    super.onActivityResult( requestCode, resultCode, intent );
    if ( requestCode == PICK_CONTACT_REQUEST ) 

        if ( resultCode == RESULT_OK ) 
                Uri pickedPhoneNumber = intent.getData();
                // handle the picked phone number in here.
            
        
    

【讨论】:

哪行代码导致了这个异常?您可以将整个堆栈粘贴到问题中吗?你在定义你的 onActivityResult() 吗? 已修复。 :) 这是一个简单的修复..实际上是我的错误..感谢您的宝贵时间:)【参考方案2】:

使用 Uri.parse() 代替。你不能直接实例化一个 Uri

【讨论】:

以上是关于Android:联系人选择器意图 |无法实例化类型 Uri的主要内容,如果未能解决你的问题,请参考以下文章

从联系人选择器意图中选择电子邮件、姓名和电话号码

Android 多联系人选择器(可选择选择哪个电话号码)

我们可以在联系人选择器意图中添加按钮吗?

从联系人选择器意图中获取人员的联系方式

Android如何根据选择器意图中的用户操作请求权限

Whatsapp喜欢通过短信实现邀请,只是短信,而不是通过意图选择器