`
iaiai
  • 浏览: 2210820 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android N 调用相册crash- FileUriExposedException

 
阅读更多
Android N 文件系统权限的变化
为了提高私有文件的安全性,在targetSdk版本为N或者以后版本的app中,其私有目录将会限制访问。这可以防止私有文件元数据的泄露,比如文件大小或者是文件是否存在。但这给开发者带来了很多不利的影响:

文件的owner不能放宽文件权限,如果你使用MODE_WORLD_READABLE或者 MODE_WORLD_WRITEABLE操作文件,将会触发SecurityException。

当你跨package域传递file://的URI时,接收者得到的将是一个无权访问的路径,因此,这将会触发FileUriExposedException。对于这类操作,官方推荐的方式是使用FileProvider,当然你也可以使用ContentProvider。这里只看文字理解起来可能有点小困难,所以我将以调用系统拍照为例说明下:在targetSdk为Android N之前的系统版本时,你可以使用如下方法调用系统相机拍照并存入指定路径中。
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri uri = Uri.fromFile(sdcardTempFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);


当你将targetSdk设置为Android N时,很不幸,在执行到这段代码时app就crash了,crash便是FileUriExposedException。

方法一:
把代码修改下,使用ContentProvider方式传递uri,这样在Android N上便可以正常运行了。
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues contentValues = new ContentValues(1);
contentValues.put(MediaStore.Images.Media.DATA, sdcardTempFile.getAbsolutePath());
Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues);


方法二:

通过FileProvider解决
分享到:
评论

相关推荐

    android-system-webview-7703.apk

    Android8.0以下手机自带的android-system-webview版本过低使用

    android studio 调用相机拍照,选择相册照片

    在Android开发中,调用相机拍照和选择相册照片是常见的功能,这涉及到Android系统级别的交互和权限管理。本文将详细讲解如何在Android Studio中实现这两个功能,并将获取的图片进行存储。 首先,我们需要在...

    Android调用Camera实现拍照--github地址

    这是github的项目源码地址。Android Studio2.3.3调用系统的Camera实现拍照功能,并将照片保存到本地内存卡中

    down2mobile.net_ksoap2-android-assembly-2.4-jar-with-dependencies.jar

    down2mobile.net_ksoap2-android-assembly-2.4-jar-with-dependencies.jar 用于方方便调用web service

    android-sdk-opencv-4.5.5&opencv-contrib-4.5.5-arm64-v8a

    1.android 版的opencv-4.5.5 sdk; 2.含有opencv-contrib-4.5.5 扩展模块;...3.可以在android studio 中加载,通过java 层调用,也可以添加so库+头文件的方式在jni 层调用; 4.适用于arm64-v8a架构,即64bit cpu。

    android Webview(H5)中调用相册和拍照

    本文将详细讲解如何在Android的Webview中调用相册和拍照功能,以实现H5与原生Android应用的深度集成。 首先,我们需要了解`WebView`的基本用法。`WebView`是Android SDK中的一个类,它可以加载URL,展示HTML页面,...

    unity与Android交互 调用Android的相册

    在Unity游戏开发中,有时我们需要将游戏与移动设备的系统功能进行交互,比如调用Android设备的相册来选择图片。这个过程涉及到Unity与Android原生代码的互操作性,通常通过Java插件或者Android插件系统实现。下面将...

    android原生调用vue的uniapp插件

    此源码为android原生调用uniapp插件,android开发工具为androidStudio,uniapp是vue写的,用hBuilder工具。适合使用vue做界面,java为后台的android应用程序,弥补了hBuilder uniapp打包次数限制,程序实现了android...

    creator实现调用android相机相册,并实现裁剪后图片的上传和下载

    在Android应用开发中,涉及到用户交互时,常常需要调用系统相机或相册来获取图片,然后进行裁剪处理,并最终上传至服务器。这个过程涵盖了多个关键知识点,包括权限管理、Intent启动相机与相册、图片裁剪、文件操作...

    Androidstudio和unity 交互 调用相机相册

    在Android Studio和Unity之间的交互中,调用相机和相册功能是常见的需求,尤其是在开发混合式移动应用时。本文将详细讲解如何实现这一功能,并针对Android 6.0及以上版本的权限管理进行适配。 首先,理解Android ...

    ksoap2-android-assembly-3.6.2-jar-with-dependencies

    Android 调用webService接口 。在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WEbservice客户端库非常丰富,例如Axis2,CXF等,但这些开发包对于Android系统...

    Android + <调用相机拍照 & 选择相册> + 数码相机

    【TakePicture】项目分为两大部分...实测:android 8、9、10、11、13以及鸿蒙系统有效。 机型:小米、OPPO、VIVO、华为手机。 1. 上传头像并裁剪。 2. 上传多张照片并做压缩处理,图片可实现在线预览,伸缩放大等功能。

    android-support-v7-appcompat.rar with Palette

    Android Support Library v7 AppCompat库是Google为了兼容早期Android版本而推出的一个重要组件,它使得开发者可以将最新的Android设计元素和功能应用到Android 2.1(API级别7)及以上的设备上。此库包含了丰富的...

    android调用wcf服务

    android客户端调用的ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar 在调试时,先启动C#开发的exe,然后根据本地ip,设置一下android源码部分的ip。就可以进行试验了。 2014年3月17日15:28:23 Create ...

    Android WebView调用本地相册的方法

    Android WebView调用本地相册的方法 Android WebView调用本地相册的方法主要是指在Android应用程序中使用WebView组件调用本地相册,以便用户可以选择和上传图片。这个方法是非常有价值的,特别是在移动端开发中,...

    android webview调用系统相机和图库

    android webview调用系统相机和图库支持5.0通过了小米2s(android5.0.2)小米4(android 4.4.4)还有LG的nexus(android 5.0)的测试,在三星GT-I9300I(android 4.3 在这款手机上测试的时候,拍照后有的时候在...

    ksoap2完整版jar包 Android调用webservice

    3. **ksoap2-android-assembly-3.2.0-jar-with-dependencies.jar** 这个jar文件是ksoap2的完整版本,其中包含了所有依赖,避免了因为缺少依赖而引发的运行时错误。在Android Studio项目中,你可以将这个jar文件添加...

    android 利用speex 音频降噪,回声消除demo

    在Android平台上,音频处理是一个重要的领域,特别是在实时通信或者语音识别等应用场景中。 Speex是一种开源的音频编解码器,特别适合用于语音通信,因为它提供了高质量的音频压缩以及噪声抑制和回声消除功能。本篇...

    delphi xe5 android 调用照相机获取拍的照片

    Delphi XE5 Android 调用照相机获取拍的照片 Delphi XE5 是一款功能强大且流行的开发环境,它提供了许多优秀的功能,包括对 Android 平台的支持。在 Android 平台上,Delphi XE5 提供了许多有用的组件和 API,允许...

    vs实现android应用程序调用.net webservices接口 xamarin也能编译执行

    配置环境:vs2012 jdk jre sdk xamarin mono ...实现功能:实现xamarin mono for android调用webservice接口登录,界面简单布局,使用android样式,自建webservices接口应用程序 关键字:xamarin mono http web 接口

Global site tag (gtag.js) - Google Analytics