博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小米手机相册选取后的intent为空?
阅读量:2112 次
发布时间:2019-04-29

本文共 5249 字,大约阅读时间需要 17 分钟。

一、问题现象

在小米手机选择相册图片-裁剪后发现拿不到图片 展示不出来,通过debug发现小米手机上的Intent返回了空

@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);

}

二、问题解决

因此小米手机的相册选择图片需要进行特殊处理

/**     * 小米     *     * @param intent     * @return     */    public Uri getPictureUri(android.content.Intent intent) {        Uri uri = intent.getData();        String type = intent.getType();        if (uri.getScheme().equals("file") && (type.contains("image/"))) {            String path = uri.getEncodedPath();            if (path != null) {                path = Uri.decode(path);                ContentResolver cr = this.getContentResolver();                StringBuffer buff = new StringBuffer();                buff.append("(").append(MediaStore.Images.ImageColumns.DATA).append("=")                        .append("'" + path + "'").append(")");                Cursor cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,                        new String[]{MediaStore.Images.ImageColumns._ID},                        buff.toString(), null, null);                int index = 0;                for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {                    index = cur.getColumnIndex(MediaStore.Images.ImageColumns._ID);                    // set _id value                    index = cur.getInt(index);                }                if (index == 0) {                    // do nothing                } else {                    Uri uri_temp = Uri                            .parse("content://media/external/images/media/"                                    + index);                    if (uri_temp != null) {                        uri = uri_temp;                    }                }            }        }        return uri;    }
private void reSizeImage(Uri uri) {//重新剪裁图片的大小        Intent intent = new Intent("com.android.camera.action.CROP");        intent.setDataAndType(uri, "image/*");        // crop为true是设置在开启的intent中设置显示的view可以剪裁        intent.putExtra("crop", "true");        // aspectX aspectY 是宽高的比例        intent.putExtra("aspectX", 1);        intent.putExtra("aspectY", 1);        // outputX,outputY 是剪裁图片的宽高        intent.putExtra("outputX", 300);        intent.putExtra("outputY", 300);        /**         * 此方法返回的图片只能是小图片(sumsang测试为高宽160px的图片)         * 故只保存图片Uri,调用时将Uri转换为Bitmap,此方法还可解决miui系统不能return data的问题         */        //intent.putExtra("return-data", true);        //裁剪后的图片Uri路径,uritempFile为Uri类变量        photoURI = Uri.parse("file://" + "/" + Environment.getExternalStorageDirectory().getPath() + "/" + "small.jpg");        intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());        startActivityForResult(intent, REQUEST_SMALL_IMAGE_CUTTING);    }
@Override    public void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        // 回调成功        if (resultCode == RESULT_OK) {            switch (requestCode) {                // 小图切割                case REQUEST_SMALL_IMAGE_CUTTING:                    // 小米手机需要特殊适配                    if (GmConstant.PHONE_XIAOMI.equals(android.os.Build.MANUFACTURER) || GmConstant.PHONE_VIVO.equals(android.os.Build.MANUFACTURER) || Build.VERSION.SDK_INT > 24) {                        try {                            Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(photoURI));                            // 缩放图片大小                            Bitmap resetSaveBitmap = Bitmap.createScaledBitmap(bitmap, 960, 1280, true);                            Uri uriPath = BitmapUtil.saveAlbum(MainActivity.this, resetSaveBitmap, Bitmap.CompressFormat.JPEG, 100, true);                            String imgpath = GmUriToPathUtil.getRealFilePath(MainActivity.this, uriPath);                            Intent intent = new Intent(MainActivity.this, TakeFaceActivity.class);                            intent.putExtra("facePath", imgpath);                            startActivity(intent);                        } catch (FileNotFoundException e) {                            e.printStackTrace();                        }                    } else {                        if (data != null) {                            setPicToView(data);                        }                    }                    break;                // 相册选取                case REQUEST_IMAGE_GET:                    // 小米的相册选择比较特殊、需要适配                    if (GmConstant.PHONE_XIAOMI.equals(android.os.Build.MANUFACTURER) || GmConstant.PHONE_VIVO.equals(android.os.Build.MANUFACTURER) || Build.VERSION.SDK_INT > 24) {                        photoURI = getPictureUri(data);                        reSizeImage(photoURI);                    } else {                        try {                            photoURI = data.getData();                            startSmallPhotoZoom(photoURI);                        } catch (NullPointerException e) {                            e.printStackTrace();                        }                    }                    break;                default:                    break;            }        }    }

 

通过以上方式进行小米手机的图片获取

转载地址:http://dyvef.baihongyu.com/

你可能感兴趣的文章
云原生 第十一章 应用健康
查看>>
Leetcode C++ 《第202场周赛》
查看>>
云原生 第十二章 可观测性:监控与日志
查看>>
Leetcode C++ 《第203场周赛》
查看>>
云原生 第十三章 Kubernetes网络概念及策略控制
查看>>
《redis设计与实现》 第一部分:数据结构与对象 || 读书笔记
查看>>
《redis设计与实现》 第二部分(第9-11章):单机数据库的实现
查看>>
算法工程师 面经2019年5月
查看>>
搜索架构师 一面面经2019年6月
查看>>
稻草人手记
查看>>
第一次kaggle比赛 回顾篇
查看>>
leetcode 50. Pow(x, n)
查看>>
leetcode 130. Surrounded Regions
查看>>
【托业】【全真题库】TEST2-语法题
查看>>
博客文格式优化
查看>>
【托业】【新托业全真模拟】疑难语法题知识点总结(01~05)
查看>>
【SQL】group by 和order by 的区别。
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>