`
iaiai
  • 浏览: 2198076 次
  • 性别: 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调用C--代码和C--代码调用源码.zip

    Android调用C--代码和C--代码调用源码.zip

    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实现拍照功能,并将照片保存到本地内存卡中

    ksoap2-android-assembly-3.6.2-jar 下载

    在Android平台调用Web Service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包。此jar包用于android和webservice进行通信,目前版本3.6.2

    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仿最新微信相册-3(更新bug版)

    在Android中,这涉及到对系统相册API的调用,如使用`Intent.ACTION_PICK`启动系统的图库应用,让用户选择图片。开发者还需要处理返回的数据,通常是从`onActivityResult()`方法中获取`Intent`的`data`字段,解析出...

    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插件系统实现。下面将...

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

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

    android-support-v7-appcompat.rar with Palette

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

    Android调用隐藏系统服务锁屏

    在Android系统中,调用隐藏服务来实现锁屏和设置默认锁屏密码涉及到对Android框架层及安全机制的深入理解。下面将详细讲解这个过程涉及的知识点。 首先,Android系统是一个基于Linux内核的开源移动操作系统,它允许...

    Android-H5和Android通信框架让H5和Android相互调用更加简单

    一种常见的通信框架是基于WebView的,例如"open-android-BridgeWebView-8024da5",它可能是一个定制化的WebView组件,增强了原生Android WebView的功能。在这样的框架下,开发者可以定义自定义的JavaScript接口,...

    Android自定义控件---联系人列表A-Z排序

    在Android开发中,自定义控件是提升应用用户体验和界面独特性的重要手段。本文将深入探讨如何创建一个自定义的联系人列表,并实现A-Z字母排序功能。首先,我们需要理解Android系统的视图(View)和视图组(ViewGroup)...

    Android代码-Android-Http-Example

    取消请求(页面销毁时可调用,防止页面销毁异步请求未取消而导致的crash) 集成的第三方网络请求库 android-async-http 官网:http://loopj.com/android-async-http/ 文档:https://loopj.com/android-async-http/doc/ ...

    crash-for-ios

    《iOS应用崩溃分析工具——crash-for-ios》 在iOS应用开发过程中,处理应用程序崩溃是一项至关重要的任务。为了能够高效地定位和修复问题,开发者通常需要解析崩溃日志(crash log)。"crash-for-ios"就是这样一个...

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

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

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

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

    基于Kotlin和Java的AndroidStudio JAR打包Unity调用设计源码 - AndroidStudio_jar

    本源码提供了一个基于Kotlin和Java的AndroidStudio JAR打包Unity调用设计。项目包含45个文件,其中包括14个XML文件、10个PNG文件、3个gitignore文件、3个JAR文件、3个Gradle文件、2个Markdown文档、2个Kotlin文件、2...

Global site tag (gtag.js) - Google Analytics