与ContentProvider一起获得缩略图图像

问题描述 投票:2回答:1

我尝试获取缩略图并将其放入布局中。我的片段类带有onCreateView方法。

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
      
        cr = getActivity().getContentResolver();
        image = new ImageView(getActivity().getApplicationContext());
        String[] mProjection = {
                MediaStore.Images.Thumbnails._ID
        };
        thumbnails = cr.query(
                MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
                mProjection,
                null,
                null,
                null);

        if (thumbnails==null){
            Log.d("yerchik/fragment", "error");
        }else if (thumbnails.getCount() <1){
            Log.d("yerchik/fragment", "nothing returned");
        }else {
            Log.d("yerchik/fragment", "thumbnails returned");
            thumbnails.moveToFirst();
            int index = thumbnails.getColumnIndex(MediaStore.Images.Thumbnails._ID);
            Log.d("yerchik/fragment", "index: " + index);
            if (thumbnails.moveToNext()){
                Random r = new Random();
                int rand = r.nextInt(thumbnails.getCount());
                thumbnails.moveToPosition(rand);
                bitmap = MediaStore.Images.Thumbnails.getThumbnail(
                        cr,
                        thumbnails.getInt(index),
                        MediaStore.Images.Thumbnails.MICRO_KIND,
                        null);
                image.setImageBitmap(bitmap);
            }
        }
        return image;
    }
所以在这里我得到缩略图。我在清单文件中设置了权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

并且在我的主要活动中,我将该片段如下:

Button btn = (Button)findViewById(R.id.addBtn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                fm = getFragmentManager();
                ft = fm.beginTransaction();
                BlankFragment fragment = new BlankFragment();
                ft.add(R.id.thumbnailsGridLayout, fragment);
                ft.commit();
            }
        });

在我的日志中,我有:

返回的缩略图

所以我得到了一些缩略图,但是什么也没有出现。

有趣的是,如果我添加片段的布局并用一些src图像声明我的ImageView并注释掉image.setImageBitmap(bitmap)行,我将绘制我的示例图像。删除注释后,什么也没有显示,因此我的代码似乎绘制了一些东西,因为从布局添加的图像消失了,但是没有缩略图显示。

android android-fragments android-contentprovider mediastore
1个回答
0
投票

MediaStore.Images.Thumbnails.getThumbnail()已弃用。

尝试使用loadThumbnail()。

像这样(在科特林):

val cr = applicationContext.contentResolver
val bitmap = cr.loadThumbnail(uri,Size(25,25),null)
image.setImageBitmap(bitmap)
© www.soinside.com 2019 - 2024. All rights reserved.