我正在尝试创建一个联系人小部件,该小部件显示一个带有联系人图片和姓名的 GridView,在按下视图时打开相应联系人的信息,但是在小部件中显示图片时我被拒绝权限。
首先,我刚刚创建了一个应用程序来测试显示 GridView 和查询联系人。我提到这一点是因为这意味着我必须包含正确的权限 (android.permission.READ_CONTACTS) 才能使应用程序正常工作。一旦它起作用了,我就尝试创建一个做同样事情的小部件。除了显示有图片的联系人的图片外,一切都正常工作,由于以下异常而无法正常工作:
07-05 22:43:16.934: E/DatabaseUtils(17897): java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/contacts/165/photo from pid=710, uid=10065 requires android.permission.READ_CONTACTS
相应的应用程序是 com.teslacoilsw.launcher(Nova?),而不是我的包名,以防万一。但我很困惑:该应用程序读取所有内容并显示照片。该小部件可以很好地读取联系人的显示名称和查找 URI,但是在尝试读取图片时会出现这些异常。有什么方法我应该为小部件添加额外的权限吗?
这是我创建 RemoteView 并添加信息的代码
RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.contact_widget_row);
contactCursor.moveToPosition(position);
String contactName = contactCursor.getString(
contactCursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY));
rv.setTextViewText(R.id.text1, contactName);
String uriString = contactCursor.getString(
contactCursor.getColumnIndexOrThrow(ContactsContract.Contacts.PHOTO_URI));
if(uriString != null)
{
rv.setImageViewUri(R.id.image1, Uri.parse(uriString));
}
else
{
rv.setImageViewResource(R.id.image1, R.drawable.ic_contacts_holo_dark);
}
FWIW 空 URI 的图像显示得很好,但这不需要显示联系人的 URI。
如何设置权限以在我的小部件中显示联系人照片?