-
调用拍照获取原图
Intent captureCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //加上下面这一句,拍照文件将保存到 file 中,android 7.0 使用 Uri.fromFile(file) 是不允许的需要额外处理,后面会讲 captureCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); startActivityForResult(captureCameraIntent, REQUEST_CAPTURE_CAMERA);
-
拍照时设置 putExtra(MediaStore.EXTRA_OUTPUT, imgUri); imgUri 的路径为 getCacheDir() 时无法保存,或无法获取到图片
解决: getCacheDir() 改为其他路径 getExternalCacheDir() 可用
-
android 7.0 兼容问题
当需要共享一个文件给其他 app 使用时,android 7.0 以上需要通过 FileProvider 包装为 Uri ,而不是 Uri.fromFile(file)、
-
首先在清单文件中注册 FileProvider ,FileProvider 集成自 ContentProvider 所以需要清单中注册
<provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.fileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
-
android:resource="@xml/file_paths" 添加 file_paths.xml
image.pngfile_paths 文件内容
<?xml version="1.0" encoding="utf-8"?> <paths> <external-cache-path name="tokePhoto" path="." /> </paths>
-
在需要使用的时候判断 android 版本大于等于 7.0 的使用 FileProvider
if (Build.VERSION.SDK_INT >= 24) { Uri contentUri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileProvider", file); captureCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri); } else { captureCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); }
-
网友评论