Android 如何显示图库中资产或内部存储的图像以供选择?

Android 如何显示图库中资产或内部存储的图像以供选择?,android,android-intent,gallery,android-gallery,internal-storage,Android,Android Intent,Gallery,Android Gallery,Internal Storage,我目前正在寻找一种方法,让用户从我的应用程序数据中选择图像。图像当前位于Assets文件夹中,但如果方便的话,可以将其推送到内部存储 我不希望所有的文件都存储在公共存储中 我使用下面的代码从用户库中选择,效果很好。我希望在目前的情况下使用类似的代码 Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); intent.putExtra(Intent.

我目前正在寻找一种方法,让用户从我的应用程序数据中选择图像。图像当前位于Assets文件夹中,但如果方便的话,可以将其推送到内部存储

我不希望所有的文件都存储在公共存储中

我使用下面的代码从用户库中选择,效果很好。我希望在目前的情况下使用类似的代码

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
  • 是否有办法更改该代码以显示应用程序资产文件夹或其内部存储中的图像,而不是用户的公共库文件

  • 您应该尝试一下,并确保您的设备上安装了任何文件资源管理器应用程序

    Uri selectedUri = Uri.parse(Environment.getExternalStorageDirectory() + "/yourFolder/");
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(selectedUri, "resource/folder");
    
    if (intent.resolveActivityInfo(getPackageManager(), 0) != null)
        {
            startActivity(intent);
        }
    else 
        {
          // if you reach this place, it means there is no any file 
          // explorer app installed on your device
        }
    
    我自己用一个工具创建了一个“图库”

    我使用该端的代码创建了ImageAdapter,但做了一些更改:

     public class ImageAdapter extends BaseAdapter {
    
        private ArrayList <String> data = new ArrayList();
    
        // I'm using a yamlReader to fill in the data, but it could instead just be hardcoded.
        fillDataWithImageNames();
    
        // create a new ImageView for each item referenced by the Adapter
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView;
            if (convertView == null) {
                // if it's not recycled, initialize some attributes
                imageView = new ImageView(mContext);
                imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                imageView.setPadding(8, 8, 8, 8);
            } else {
                imageView = (ImageView) convertView;
            }
    
            // The images are in /app/assets/images/thumbnails/example.jpeg
            imageView.setImageDrawable(loadThumb("images/thumbnails/" + data.get(position) + ".jpeg"));
            return imageView;
        }
    
        // references to our images
        private Drawable loadThumb(String path) {
        try {
            // get input stream
            InputStream ims = mContext.getAssets().open(path);
            // load image as Drawable
            Drawable d = Drawable.createFromStream(ims, null);
            // set image to ImageView
            return d;
        }
        catch(IOException ex) {
            return null;
        }
    }
    
    公共类ImageAdapter扩展了BaseAdapter{
    private ArrayList data=new ArrayList();
    //我使用yamlReader来填充数据,但它可以只是硬编码。
    fillDataWithImageNames();
    //为适配器引用的每个项目创建新的ImageView
    公共视图getView(int位置、视图转换视图、视图组父视图){
    图像视图图像视图;
    if(convertView==null){
    //如果没有回收,初始化一些属性
    imageView=新的imageView(mContext);
    setLayoutParams(新的GridView.LayoutParams(85,85));
    imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
    设置填充(8,8,8,8);
    }否则{
    imageView=(imageView)convertView;
    }
    //图像位于/app/assets/images/thumbnails/example.jpeg中
    setImageDrawable(loadThumb(“图像/缩略图/”+数据.get(位置)+.jpeg”);
    返回图像视图;
    }
    //参考我们的图像
    专用可拖动loadThumb(字符串路径){
    试一试{
    //获取输入流
    InputStream ims=mContext.getAssets().open(路径);
    //将图像加载为可绘制
    Drawable d=Drawable.createFromStream(ims,null);
    //将图像设置为ImageView
    返回d;
    }
    捕获(IOEX异常){
    返回null;
    }
    }