一、序言
在安卓开发过程中,有时候我们的应用需要使用手机本地图片,这就需要本地图片访问权限以及相关的获取方法,本文将手机本地图片的获取流程和代码做了一个总结,希望能够对大家有一定帮助;
二、功能分析
2.1 获取图片信息
首先要获取本地图片的相关信息,如:存储路径、名称等,这里就要用到ContentResolver;
private void initImages() {
int count = 0;
imageList = new ArrayList();
@SuppressLint("Recycle") Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
null, null, null, null);
while (cursor.moveToNext()) {
//获取图片的名称
String name = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME));
Log.d("ImgActivity: ", "initImages: " + "imageName: " + name);
//获取图片的路径
byte[] data = cursor.getBlob(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
String location = new String(data, 0, data.length - 1);
Log.d("ImgActivity: ", "initImages: " + "imageLocation: " + location);
//根据路径获取图片
Bitmap bm = getImgFromDesc(location);
//获取图片的详细信息
String desc = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DESCRIPTION));
Log.d("ImgActivity", "initImages: " + "ImageDesc: " + desc);
Image image = new Image(bm, name, location);
imageList.add(image);
count++;
if(count > 3) break;
}
Log.d("ImgActivity: ", "initImage: " + "imageList.size: " + imageList.size());
}
2.2 获取图片资源
要将图片显示出来,就要获取图片资源,这里采用BitmapFactory类对相应路径下的位图资源;
//根据路径获取图片
private Bitmap getImgFromDesc(String path) {
Bitmap bm = null;
File file = new File(path);
// 动态申请权限
String[] permissions = {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA};
final int REQUEST_CODE = 10001;
// 版本判断。当手机系统大于 23 时,才有必要去判断权限是否获取
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 检查该权限是否已经获取
for (String permission : permissions) {
// GRANTED---授权 DINIED---拒绝
if (ContextCompat.checkSelfPermission(getApplicationContext(), permission) == PackageManager.PERMISSION_DENIED) {
ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE);
}
}
}
boolean permission_readStorage = (ContextCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
boolean permission_camera = (ContextCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED);
Log.d("ImgActivity:", "getImageFromDesc: \n");
Log.d("ImgActivity: ", "readPermission: " + permission_readStorage + "\n");
Log.d("ImgActivity: ", "cameraPermission: " + permission_camera + "\n");
if(file.exists()) {
bm = BitmapFactory.decodeFile(path);
} else {
ToastUtil.showLong("该图片不存在&#