ビューが押されたときに適切な連絡先の情報を開いて、連絡先の写真と名前を含む 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);
}
null URI の画像は問題なく表示されますが、連絡先から URI を表示する必要はありません。
ウィジェットに連絡先の写真を表示するには、どのように権限を設定する必要がありますか?