如何在Android 4+小部件中显示联系人照片?

时间:2013-01-23 12:49:03

标签: android-widget android-contacts

我正在尝试使用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"
/>

1 个答案:

答案 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);