Android获取手机本地图片并显示

一、序言

        在安卓开发过程中,有时候我们的应用需要使用手机本地图片,这就需要本地图片访问权限以及相关的获取方法,本文将手机本地图片的获取流程和代码做了一个总结,希望能够对大家有一定帮助;

二、功能分析 

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("该图片不存在&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值