适配AndroidQ拍照和读取相册图片的实现方法
Google发行AndroidQ版本也有很长一段时间了,华为应用市场已经要求要适配AndroidQ版本了,所以,我们也要去对AndroidQ进行适配。
先讲一下咱们这节用到的新特性
- AndroidQ文件存储机制修改成了沙盒模式,类似于iOS
- 应用只能访问自己沙盒下的文件和公共媒体文件
如果有想具体了解AndroidQ新版特效的可以去官方文档
我们在这个地方记录一下AndroidQ版本进行拍照保存到相册的功能。
权限问题
AndroidQ不再需要申请文件读写权限,默认可以读写自己沙盒文件和公共媒体文件。因为相册属于公共媒体文件,所以,AndroidQ可以不用再动态申请权限。但是AndroidQ以下版本必须要申请权限才可以访问。
拍照
图片正常保存
拍照:AndroidQ之前版本使用的,将图片保存到指定文件夹,拍照完成后需要通知相册刷新
拍照代码
//拍照存放路径 FilefileDir=newFile(Environment.getExternalStorageDirectory(),"Pictures"); if(!fileDir.exists()){ fileDir.mkdir(); } //图片名称 StringfileName="/IMG_"+System.currentTimeMillis()+".jpg"; //跳转到相机 Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE); Uriuri; //适配AndroidN之后版本 if(Build.VERSION.SDK_INT>=24){ uri=FileProvider.getUriForFile(this,ImagePickerProvider.getFileProviderName(this),newFile(mFilePath)); }else{ //适配AndroidN版本之前 uri=Uri.fromFile(newFile(mFilePath)); } intent.putExtra(MediaStore.EXTRA_OUTPUT,uri); //跳转,需要在onActivityResult进行处理 startActivityForResult(intent,1111);
刷新相册代码
sendBroadcast(newIntent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse("file://"+mFilePath)));
以上就是AndroidQ之前版本通用的拍照代码,有需要的可以直接复制就行
将图片保存到沙盒内
- 沙盒里面操作文件不再需要申请权限
- 沙盒中新建文件夹只能再系统指定的子文件夹中新建
AndroidQ版本使用,将图片存放到沙盒文件内,图库无法刷新,无法显示
//获取图片沙盒文件夹 FilePICTURES=getExternalFilesDir(Environment.DIRECTORY_PICTURES); //图片名称 mFileName="IMG_"+System.currentTimeMillis()+".jpg"; //图片路径 mFilePath=PICTURES.getAbsolutePath()+"/"+mFileName; //跳转到相机 Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE); Uriuri; if(Build.VERSION.SDK_INT>=24){ uri=FileProvider.getUriForFile(this,ImagePickerProvider.getFileProviderName(this),newFile(mFilePath)); }else{ uri=Uri.fromFile(newFile(mFilePath)); } intent.putExtra(MediaStore.EXTRA_OUTPUT,uri); startActivityForResult(intent,1111);
这个不用调用代码刷新相册库,因为刷新了也不能显示