最近有一个需求是打开系统相册并指定一张图片的路径,所以仔细研究了下。
把遇到的方法都总结了下:
########android调用系统相册打开指定的一张图片或者指定的文件夹里面的所有图片
########android打开系统相册总结
- 打开系统相册并显示指定的一张照片
public void openPhoto(String filePath) {
File file = new File(filePath);
//这里的file是获取你指定的一张图片的路径
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(getImageContentUri(file), "image/*");
startActivity(intent);
}
/**
* 转换 content:// uri
*
* @param imageFile
* @return
*/
public Uri getImageContentUri(File imageFile) {
String filePath = imageFile.getAbsolutePath();
Cursor cursor = getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Images.Media._ID},
MediaStore.Images.Media.DATA + "=? ",
new String[]{filePath}, null);
if (cursor != null && cursor.moveToFirst()) {
int id = cursor.getInt(cursor
.getColumnIndex(MediaStore.MediaColumns._ID));
Uri baseUri = Uri.parse("content://media/external/images/media");
return Uri.withAppendedPath(baseUri, "" + id);
} else {
if (imageFile.exists()) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, filePath);
return getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
} else {
return null;
}
}
}
//getImageContentUri 这个方法是4.0之前用的Uri.fromFile(pictureFilepath),后面因为版本问题会提示报错的,
所有封装了一个转换 content:// uri的方法。
调用的时候直接调用openPhoto(filePath)这个就行了。
- 打开系统相册
Intent intent=new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivity(intent);
3.打开系统相册浏览照片
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://media/internal/images/media"));
startActivity(intent);
4.打开系统相册并浏览指定的目录下的所有图片
//这里path就是传的需要浏览指定的文件夹的路径
public void openPathPhoto(String path) {
File file = new File(path);
if (file.exists() && file.listFiles().length > 0) {
// String path= getSDPath() + "/Pictures/PDF原图";
new PictureScanner(context, path);
} else {
ToastUtil.show(context, "当前路径不存在或者无图片!");
}
}
工具类:
public class PictureScanner implements MediaScannerConnection.MediaScannerConnectionClient {
private MediaScannerConnection mMs;
private File mFile;
private Context context;
File[] allFiles;
public PictureScanner(Context context, String pictureFolderPath) {
File folder = new File(pictureFolderPath);
allFiles = folder.listFiles();
if (allFiles.length > 0) {
swap(allFiles);
} else {
return;
}
this.context = context;
mFile = allFiles[0];
mMs = new MediaScannerConnection(context, this);
mMs.connect();
}
public void onMediaScannerConnected() {
mMs.scanFile(mFile.getAbsolutePath(), null);
}
public void onScanCompleted(String path, Uri uri) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
context.startActivity(intent);
mMs.disconnect();
}
private void swap(File a[]) {
int len = a.length;
for (int i = 0; i < len / 2; i++) {
File tmp = a[i];
a[i] = a[len - 1 - i];
a[len - 1 - i] = tmp;
}
}
}
|