我正在逐步完成“专业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运行了相应的例子并得到了同样的错误。任何想法在这里可能有什么问题?
答案 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