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
Android8.0以下手机自带的android-system-webview版本过低使用
在Android开发中,调用相机拍照和选择相册照片是常见的功能,这涉及到Android系统级别的交互和权限管理。本文将详细讲解如何在Android Studio中实现这两个功能,并将获取的图片进行存储。 首先,我们需要在...
这是github的项目源码地址。Android Studio2.3.3调用系统的Camera实现拍照功能,并将照片保存到本地内存卡中
在Android平台调用Web Service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包。此jar包用于android和webservice进行通信,目前版本3.6.2
down2mobile.net_ksoap2-android-assembly-2.4-jar-with-dependencies.jar 用于方方便调用web service
在Android中,这涉及到对系统相册API的调用,如使用`Intent.ACTION_PICK`启动系统的图库应用,让用户选择图片。开发者还需要处理返回的数据,通常是从`onActivityResult()`方法中获取`Intent`的`data`字段,解析出...
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`的基本用法。`WebView`是Android SDK中的一个类,它可以加载URL,展示HTML页面,...
在Unity游戏开发中,有时我们需要将游戏与移动设备的系统功能进行交互,比如调用Android设备的相册来选择图片。这个过程涉及到Unity与Android原生代码的互操作性,通常通过Java插件或者Android插件系统实现。下面将...
Android 调用webService接口 。在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WEbservice客户端库非常丰富,例如Axis2,CXF等,但这些开发包对于Android系统...
Android Support Library v7 AppCompat库是Google为了兼容早期Android版本而推出的一个重要组件,它使得开发者可以将最新的Android设计元素和功能应用到Android 2.1(API级别7)及以上的设备上。此库包含了丰富的...
在Android系统中,调用隐藏服务来实现锁屏和设置默认锁屏密码涉及到对Android框架层及安全机制的深入理解。下面将详细讲解这个过程涉及的知识点。 首先,Android系统是一个基于Linux内核的开源移动操作系统,它允许...
一种常见的通信框架是基于WebView的,例如"open-android-BridgeWebView-8024da5",它可能是一个定制化的WebView组件,增强了原生Android WebView的功能。在这样的框架下,开发者可以定义自定义的JavaScript接口,...
在Android开发中,自定义控件是提升应用用户体验和界面独特性的重要手段。本文将深入探讨如何创建一个自定义的联系人列表,并实现A-Z字母排序功能。首先,我们需要理解Android系统的视图(View)和视图组(ViewGroup)...
取消请求(页面销毁时可调用,防止页面销毁异步请求未取消而导致的crash) 集成的第三方网络请求库 android-async-http 官网:http://loopj.com/android-async-http/ 文档:https://loopj.com/android-async-http/doc/ ...
《iOS应用崩溃分析工具——crash-for-ios》 在iOS应用开发过程中,处理应用程序崩溃是一项至关重要的任务。为了能够高效地定位和修复问题,开发者通常需要解析崩溃日志(crash log)。"crash-for-ios"就是这样一个...
在Android平台上,音频处理是一个重要的领域,特别是在实时通信或者语音识别等应用场景中。 Speex是一种开源的音频编解码器,特别适合用于语音通信,因为它提供了高质量的音频压缩以及噪声抑制和回声消除功能。本篇...
配置环境:vs2012 jdk jre sdk xamarin mono ...实现功能:实现xamarin mono for android调用webservice接口登录,界面简单布局,使用android样式,自建webservices接口应用程序 关键字:xamarin mono http web 接口
本源码提供了一个基于Kotlin和Java的AndroidStudio JAR打包Unity调用设计。项目包含45个文件,其中包括14个XML文件、10个PNG文件、3个gitignore文件、3个JAR文件、3个Gradle文件、2个Markdown文档、2个Kotlin文件、2...