适配安卓7.0系统相机拍照

Android 7.0 提供新功能以提升性能、生产效率和安全性。通过新的系统行为测试您的应用,以节省电量和内存。充分利用多窗口 UI直接回复通知等功能。

Android Nougat

Android 7.0 做了一些权限更改,当使用系统相机拍照时将受到影响;

传递软件包网域外的 file:// URI 可能给接收器留下无法访问的路径。因此,尝试传递 file:// URI 会触发 FileUriExposedException。分享私有文件内容的推荐方法是使用 FileProvider

使用系统相机拍照并且保存全尺寸照片

使用方法可以参考官方文档 Save the Full-size Photo
** https://developer.android.google.cn/training/camera/photobasics.html#TaskPath **

遇到的问题

点击照片,进入系统相机应用点击拍摄,系统相机闪退了了了😅

java.lang.SecurityException:
Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord
解决办法
Uri photoURI = FileProvider.getUriForFile(activity,
    "com.example.android.fileprovider",
    photoFile);
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
    List<ResolveInfo> resInfoList = getPackageManager()
        .queryIntentActivities(takePictureIntent,
            PackageManager.MATCH_DEFAULT_ONLY);
    for (ResolveInfo resolveInfo : resInfoList) {
        String packageName = resolveInfo.activityInfo.packageName;
        grantUriPermission(packageName, photoURI,
            Intent.FLAG_GRANT_WRITE_URI_PERMISSION
                | Intent.FLAG_GRANT_READ_URI_PERMISSION);
    }
}
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, TAKE_PICTURE);
参考资料

Android 7.0 行为变更#权限更改
Android7.0适配教程,心得
How to use support FileProvider for sharing content to other apps?
FileProvider Not Working with Camera
Android7.0拍照失败FileUriExposedException,你的拍照代码升级了吗

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容