我正在尝试使用RemoteViews.setImageViewUri()
在主屏幕小部件上显示联系人图片,但不会显示任何内容。
我记录图片URI,它是正确的,如content://com.android.contacts/contacts/293/photo
这是我的getViewAt
方法:
// Create and populate the View to display at the given index.
public RemoteViews getViewAt(int index) {
// Create a view to display at the required index.
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.item_layout);
// Populate the view with contact name.
rv.setTextViewText(R.id.name, items.get(index).getString("first_name"));
//check if we have a photo set
if (items.get(index).getString("photo_url") != null) {
Log.i("parsed uri", String.valueOf(Uri.parse(items.get(index).getString("photo_url"))));
rv.setImageViewUri(R.id.photo_url, Uri.parse(items.get(index).getString("photo_url")));
}
// Create an item-specific fill-in Intent that will populate
// the Pending Intent template created in the App Widget Provider (GridWidgetProvider).
Intent fillInIntent = new Intent();
fillInIntent.putExtra(Intent.EXTRA_TEXT, items.get(index));
rv.setOnClickFillInIntent(R.id.name, fillInIntent);
return rv;
}
它显示联系人姓名很好,但没有图片......
知道为什么吗?感谢
编辑:ImageView的xml:
<ImageView
android:id="@+id/photo_url"
android:layout_width="match_parent"
android:layout_height="125dp"
android:layout_above="@id/name"
android:gravity="center"
android:background="#FFFF0000"
/>
答案 0 :(得分:0)
自己想出来,这是代码:
//check if we have a photo set
if (items.get(index).getString("photo_url") != null) {
rv.setImageViewUri(R.id.photo_url, Uri.parse(items.get(index).getString("photo_url")));
}
Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, items.get(index).getLong("contact_id"));
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(), contactUri);
if (input != null) {
Log.i("input", String.valueOf(input));
image = BitmapFactory.decodeStream(input);
} else {
image = BitmapFactory.decodeResource(context.getResources(), R.drawable.default_dark);
}
rv.setImageViewBitmap(R.id.photo_url, image);