最近做项目测试小米机器时发现小米设备在调用系统相机以及相册时选取的数据一直返回为null,下面是我的解决方法:

// 权限申请这里就不写了,默认已经申请了权限
// 打开系统相机有两种方式,一种就是指定Intent然后开启相机,另一种是指定相机拍照存储图片的路径拍照private static final int TAKE_PHOTO = 0;
private static final int IMAGE_ALBUM = 1;// 第一种调用系统相机的方法
// click方法中
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PHOTO);// 第二种在打开相机时就指定拍照时存储路径
// click方法中
private Uri _OutPutFileUri;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 指定拍摄的图片的存储的路径
File imgFilePath = new File(Environment.getExternalStorageDirectory().toString()+ "/filename");if (!imgFilePath .exists()){imgFilePath .mkdirs();}// 图片名File file = new File(path1, System.currentTimeMillis() + ".jpg");_OutPutFileUri = Uri.fromFile(file);                intent.putExtra(MediaStore.EXTRA_OUTPUT, _OutPutFileUri);
startActivityForResult(intent, TAKE_PHOTO);// 打开系统相册
// click方法中
Intent intent = new Intent(Intent.ACTION_PICK, null);   intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, IMAGE_ALBUM);@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data){super.onActivityResult(requestCode, resultCode, data);// 当data为空的时候表明没有指定Uri,为空是表明指定了Uriif (data != null){switch (requestCode){case TAKE_PHOTO:// 没有指定文件路径拍照时会在这里接受到拍照的照片,你会发现获取的uri一直是null//,这可能是小米机器的问题所以第一种方法没有我们用第二种方法Uri uri= data.getData();break;case IMAGE_ALBUM:// 调用图库在这里返回的Uri在小米上面显示为空getSelectAlbumUri(data);break;}return;}switch (requestCode){case TAKE_PHOTO:// 这里就能获取到我们调用相机拍照的照片了,但是这里又有一个问题就是当我们打开相机不拍照返回时默认会返回一个空白照片给我们原因是因为我们在调用相机一开始就已经创建了文件,但是这里只有文件名不存在图片,Bitmap bitmap = getBitmapFromUri(_OutPutFileUri, getContext());if (bitmap == null){// 有路径没有图片return;}// 有图片// TODO somethingbreak;    }}// 将Uri转换成Bitmap,从而判断用户有没有进行拍照(因为在打开相机时就默认创建了文件路径)public static Bitmap getBitmapFromUri(Uri uri, Context mContext){Bitmap bitmap = null;try{// 读取uri所在的图片bitmap = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), uri);}catch (Exception e){e.printStackTrace();}return bitmap;}// 解决小米在选在图片数据返回为null为题public Uri getSelectAlbumUri(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 = getActivity().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 valueindex = 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;}

以上就是解决小米在拍照和选择系统相册数据的时候为null的情况处理。

小米拍照以及选取相册数据为空问题相关推荐

  1. APP开发-使用Vue3+vant+html5+ 实现相机拍照,选取相册图片,裁剪图片以及提取图片中的文字等功能(二)

    没用使用过Html5+请参考另一篇博客:如何在Vue项目里面使用Html5+ 一.实现图片的裁剪 1.1 在上个步骤当中,我们已经实现了拍照和相册里面选取图片,在最后的js方法当中,我们会将拍照或者从 ...

  2. 拍照与选取相册图片-cameralibrary

    版权声明:本文为延成原创文章,转载请标明出处 cameralibrary github地址:https://github.com/enChenging/cameraAndPhotos 效果图如下: 用 ...

  3. AndroidStudio实现相机拍照或从相册中选取照片并显示

    AndroidStudio相机拍照或从相册中选取照片并显示 本文最大优点在于适配Android8系统,项目给的平板版本很低,系统适配折磨了我很久 找了很多方法,这个版本是最简单并且可以成功运行的 0. ...

  4. 小米7.0 android 图片裁剪失败,Android 7.0适配 -- FileProvider 拍照、选择相册、裁切图片, 小米机型适配...

    需求: 最近把APP的TargetSdk从21提高至25后,测试时, 在Android7.0以上的系统上,爆出了一些异常. 在个别小米等机型也存在一些异常. 问题分析: FileUriExposedE ...

  5. Android学习-运用手机多媒体-通知使用技巧、调用摄像头拍照、从相册中选取照片、播放音频和视频文件(MediaPlayer、VideoView)

    android提供了一系列的API,使得我们可以在程序中调用很多的多媒体资源,从而编写出更加丰富多彩的应用程序. 使用通知 通知(Notification)是Android系统中比较有特色的一个功能, ...

  6. 小米部分手机在相册或相机拍照裁剪图片时,出现错误问题

    小米部分手机在相册或相机拍照裁剪图片时,出现错误问题 Unable to load resource 0x00000000 from pkg=com.android.systemui 报错型号:Mi ...

  7. h5前端调用android拍照功能,H5调用Android拍照和摄像以及选取相册

    之前一直认为H5调用Android,H5不需要Android配合能直接实现功能.前段时间,自己做这个功能,才发现不是这么回事. H5编写 html文件里只需要标签即可实现代码,代码如下所示: 拍照 ο ...

  8. 三星、LG等部分手机调用相机拍照的模糊问题和拍照选取相册图片旋转问题

    项目场景: 调用系统相机拍照.选择相册照片 问题描述: 部分手机(例如:三星.LG)调用系统相机拍照会模糊和旋转问题,选择的照片也会旋转问题 调用代码: Intent intent = new Int ...

  9. 安卓开发———打开相机拍照或者打开相册选择照片并显示出来

    打开相机 布局代码 <Buttonandroid:id="@+id/take_photo"android:layout_width="match_parent&qu ...

最新文章

  1. Angular应用里的@Input和@Output注解使用方法介绍
  2. 逆水寒服务器维护7.5,逆水寒7.26日维护到什么时候 逆水寒7.26日游戏改动汇总介绍...
  3. Python:以鸢尾花数据为例,介绍决策树算法
  4. 【HDU - 5777】domino(贪心)
  5. 获奖者:舒继武,男,清华大学计算机系教授、博士生导师,教育部长江学者特聘教授,国家杰出青年基金获得者,《大数据》杂志编委。...
  6. 利用Azure backup备份和恢复Azure虚拟机(1)
  7. wdatepicker ajax传参,DatePicker在Ajax加载的页面中不起作用
  8. 在sql server中用正则表达式替换html标签,SQL Server中利用正则表达式替换字符串
  9. ❤️ Spring相关配置
  10. 目录-换热器及其计算基础知识
  11. 网卡82546驱动linux,英特尔网卡驱动 Intel PRO100/1000/10GbE Win7/Win8/2
  12. 固定连接修改后无觅推荐结果问题修改
  13. android 模拟内存不足,雷电模拟器内存不足怎么办?雷电安卓模拟器怎么修改内存大小?...
  14. pyqt5 selenium 等待元素出现 visibility_of_element_located
  15. 蓝桥 卷“兔”来袭编程竞赛专场-06姜子牙阴书加密 题解
  16. Dreamweaver CS 5 快捷键大全
  17. 【学习笔记】树莓派(3B+)及VMware对于代理Proxy的使用
  18. 如何破解Word锁定文件的方法
  19. Vue.js入门 0x2 内置指令(1)
  20. VMware虚拟机的使用

热门文章

  1. 如何写好文档之金字塔原理
  2. SCI影响因子及自然科学基金查询(MedSci)
  3. Python批量处理文件、图片、视频【干货建议收藏】
  4. plsql和sql developer導入導出
  5. 上班玩游戏被抓--观察者模式
  6. 国产CPU深度研究报告(110页)
  7. 视频教程-Excel 2016培训教程-Office/WPS
  8. 质量内建是规模化敏捷(规模化研发交付)的核心
  9. 【问题解决】Kafka报错 Bootstrap broker x.x.x.x:9092 (id: -1 rack: null) disconnected
  10. 简述光纤通信有哪些优势特点分析