为什么会出现“无法获取类型:content:// contacts /”

时间:2012-10-06 19:08:17

标签: android android-contacts android-contentresolver

我正在逐步完成“专业Android 4应用程序开发”中的教程。在第5章中,有一个简单的应用程序,演示了如何选择联系人并打印结果。

在我进入应用程序并进行测试后,我收到以下错误:

  

10-06 11:29:04.596:W / ContentResolver(1073):无法获取类型:content:// contacts /(URI:content:// contacts /,调用user:android.uid.system: 1000,调用包是以下之一:[com.android.keychain,com.android.settings,android,com.android.providers.settings,com.android.inputdevices])

此字符串在以下方法中引用:

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contact_picker_tester);

    Button  button  = (Button) findViewById(R.id.pick_contact_button);

    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent  intent  = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/"));
            startActivityForResult(intent, PICK_CONTACT);
        }
    });
}

我想也许我做错了什么,所以我从Book source code运行了相应的例子并得到了同样的错误。任何想法在这里可能有什么问题?

3 个答案:

答案 0 :(得分:5)

尝试更改

Intent  intent  = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/"));

到:

Intent intentContact = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);

我认为你的uri是不正确的,这就是它抛出类型错误的原因。

答案 1 :(得分:2)

我刚从本书中看到了相同的样本。内容URI“content:// contacts”无效且缺少authority。它应该被定义为

Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://picker/contacts/"));

权限“选择器”是整个提供者的任意名称。

答案 2 :(得分:0)

你在android manifest.xml中拥有正确的权限吗?

你需要:

android.permission.READ_CONTACTS

来自http://developer.android.com/reference/android/Manifest.permission.html