2012-07-06 6 views
2

보기를 누르면 해당 연락처의 정보를 열어 연락처의 그림과 이름으로 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되었다 (? 노바) 반대로 내 패키지 이름. 하지만 난 혼란스러워 : 애플 리케이션은 모든 것을 잘 읽고 사진을 표시했습니다. 위젯은 연락처의 표시 이름과 조회 URI를 잘 읽었지만 그림을 읽을 때 이러한 예외가 발생합니다. 위젯에 추가 사용 권한을 추가 할 방법이 있습니까? 여기

내가 리모트 뷰를 생성하고 정보

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를 잘 표시 널 (null)에 대한 이미지를 추가하는 코드입니다 만, 그 접점에서 URI를 표시 할 필요가 없습니다.

내 위젯에 연락처 사진을 표시하려면 권한을 어떻게 설정해야합니까?

답변

0

가능한 해결 방법을 가지고 놀아보고 작동하는 것을 발견했습니다. 대신 URI와 리모트 뷰 RemoteViews에서 이미지를 만드는, 비트 맵을 생성하기 위해 URI를 사용하고 그와 리모트 뷰 RemoteViews의 이미지를 설정합니다

if(uriString != null) 
{ 
    //rv.setImageViewUri(R.id.image1, Uri.parse(uriString)); 
    try 
    { 
     Bitmap bm = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), Uri.parse(uriString)); 
     rv.setImageViewBitmap(R.id.image1, bm); 
    } 
    catch(Exception e) 
    { 
     rv.setImageViewResource(R.id.image1, R.drawable.ic_contacts_holo_dark); 
    } 
} 
else 
{ 
    rv.setImageViewResource(R.id.image1, R.drawable.ic_contacts_holo_dark); 
} 

캐치 블록은 비트 맵 생성 호출이 FileNotFoundException이와 IOException가 발생하기 때문에 .

왜이 기능이 작동하는지 모르지만 그렇습니다. 비트 맵 (READ_CONTACTS 권한이있는 패키지 내)을 만들 때 연락처의 URI에서 이미지를 읽으므로 런처가 (내 패키지 외부에서) 위젯을 그릴 때와 반대되는 것으로 추측합니다.

URI에서 비트 맵을 만드는 방법을 알려주는 답변을 this link에 보내고 싶습니다.