美文网首页
选取图片最佳实践

选取图片最佳实践

作者: 满船清梦___ | 来源:发表于2017-10-17 09:58 被阅读9次
  1. 开启选取图片Intent, 其他方式存在各种问题,
void choosePic() {
        Intent intent = new Intent(Intent.ACTION_PICK);// ACTION_GET_CONTENT
        intent.setDataAndType(MediaStore.Images.Media.INTERNAL_CONTENT_URI, "image/*");
        startActivityForResult(intent, PICTURE);
    }
  1. 获取选取的result, 根据标记code判断并获取uri
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (data == null) {
            return;
        }
        Uri uri = data.getData();
        switch (requestCode) {
            case PICTURE:
                String path = "";
                Log.d(TAG, "uri: " + uri);
                Log.d(TAG, "uri RealPath: " + getPathFromUri(this, uri));

                if (new File(uri.getPath()).exists()) {
                    path = uri.getPath();
                    Log.d(TAG, "uri.getPath()");
                } else {
                    path = getPathFromUri(this, uri);
                    Log.d(TAG, "setImageBitmap");
                }
                Log.d(TAG, "path: " + path);

                Bitmap bm = BitmapFactory.decodeFile(path);
                image.setLayerType(View.LAYER_TYPE_HARDWARE,null);
                image.setImageBitmap(bm);
                File file = new File(path);
                Log.d(TAG, "file.exists():" + file.exists());
                Log.d(TAG, "file.getPath():" + file.getPath());
                break;
            default:
                break;
        }
    }
  1. 对应不同机型,返回的uri类型不同,需判断处理后统一格式
    public static String getPathFromUri(Context context, Uri contentUri) {
        Cursor cursor = null;
        try {
            String[] proj = {MediaStore.Images.Media.DATA};
            cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
            if (cursor != null) {
                int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                cursor.moveToFirst();
                return cursor.getString(column_index);
            } else {
                return null;
            }
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
    }
  1. 安卓版本6.0以后, 注意申请权限
    @RequiresApi(api = Build.VERSION_CODES.M)
    void requestPermission() {
        int REQUEST_CODE_CONTACT = 101;
        String[] permissions = {
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE
        };
        //验证是否许可权限
        for (String str : permissions) {
            if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
                //申请权限
                this.requestPermissions(permissions, REQUEST_CODE_CONTACT);
                return;
            }
        }
    }

相关文章

  • 选取图片最佳实践

    开启选取图片Intent, 其他方式存在各种问题, 获取选取的result, 根据标记code判断并获取uri 对...

  • 图片优化的最佳实践

    如今行业内的图片格式越来越丰富,优化、压缩的方法也越来越多。我们该如何选择适合自己项目的图片优化方法呢?让我们来一...

  • 3 创建图片最佳实践

    简介 1 . 之前关于图片就知道些懒加载。 alt 1 .备选文本,是对图片的文字性描述,用于在图片无法显示或不能...

  • 图片选取器

    源码下载地址:https://github.com/MaShengKui/ImageSelector 喜欢的朋友记...

  • android从系统相册选取图片并剪切

    1.选取图片,不剪切 2.选取图片并剪切 3.获取选择的图片路径

  • [iOS] 图片优化

    WWDC2018 图像最佳实践 iOS 处理图片的一些小 Tip 谈谈 iOS 中图片的解压缩 WWDC 2018...

  • [iOS] 开发技巧 <1>

    最好的iOS开发技巧和窍门-Medium iOS中的图片使用方式、内存对比和最佳实践

  • Flutter 拼图小游戏

    效果图 主要实现功能 选取系统相册图片 切割图片 打乱图片 移动图片 选取系统相册 用的是flutter的imag...

  • [译]Xcode 环境配置最佳实践

    [译]Xcode 环境配置最佳实践 [译]Xcode 环境配置最佳实践

  • jQuery编程的最佳实践

    jQuery编程的最佳实践 @(jquery)[jquery|最佳实践|编程规范] [TOC] 加载jQuery ...

网友评论

      本文标题:选取图片最佳实践

      本文链接:https://www.haomeiwen.com/subject/vjiruxtx.html