Android 如何显示图库中资产或内部存储的图像以供选择?
我目前正在寻找一种方法,让用户从我的应用程序数据中选择图像。图像当前位于Assets文件夹中,但如果方便的话,可以将其推送到内部存储 我不希望所有的文件都存储在公共存储中 我使用下面的代码从用户库中选择,效果很好。我希望在目前的情况下使用类似的代码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.
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;
}
}