android7.0后对于file://的限制
错误信息:
04-18 14:56:58.283 4440 4440 W System.err: android.os.FileUriExposedException: file:///storage/emulated/0/temp.jpg exposed beyond app through ClipData.Item.getUri()
04-18 14:56:58.283 4440 4440 W System.err: at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)
04-18 14:56:58.283 4440 4440 W System.err: at android.net.Uri.checkFileUriExposed(Uri.java:2346)
04-18 14:56:58.283 4440 4440 W System.err: at android.content.ClipData.prepareToLeaveProcess(ClipData.java:845)
04-18 14:56:58.283 4440 4440 W System.err: at android.content.Intent.prepareToLeaveProcess(Intent.java:9044)
04-18 14:56:58.283 4440 4440 W System.err: at android.content.Intent.prepareToLeaveProcess(Intent.java:9029)
04-18 14:56:58.283 4440 4440 W System.err: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1525)
04-18 14:56:58.283 4440 4440 W System.err: at android.app.Activity.startActivityForResult(Activity.java:4341)
04-18 14:56:58.283 4440 4440 W System.err: at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48)
04-18 14:56:58.283 4440 4440 W System.err: at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75)
04-18 14:56:58.283 4440 4440 W System.err: at android.app.Activity.startActivityForResult(Activity.java:4299)
04-18 14:56:58.283 4440 4440 W System.err: at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:856)
04-18 14:56:58.283 4440 4440 W System.err: at com.longdai.android.ui.ui2.PersonInfoActivity.b(PersonInfoActivity.java:110)
04-18 14:56:58.283 4440 4440 W System.err: at com.longdai.android.ui.ui2.PersonInfoActivity$2.onClick(PersonInfoActivity.java:388)
04-18 14:56:58.283 4440 4440 W System.err: at android.view.View.performClick(View.java:5642)
04-18 14:56:58.283 4440 4440 W System.err: at android.view.View$PerformClick.run(View.java:22489)
04-18 14:56:58.283 4440 4440 W System.err: at android.os.Handler.handleCallback(Handler.java:751)
04-18 14:56:58.283 4440 4440 W System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
04-18 14:56:58.283 4440 4440 W System.err: at android.os.Looper.loop(Looper.java:154)
04-18 14:56:58.283 4440 4440 W System.err: at android.app.ActivityThread.main(ActivityThread.java:6217)
04-18 14:56:58.283 4440 4440 W System.err: at java.lang.reflect.Method.invoke(Native Method)
04-18 14:56:58.283 4440 4440 W System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1108)
04-18 14:56:58.283 4440 4440 W System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:998)
04-18 14:56:58.323 548 635 W SurfaceFlinger: eventControl: set enabled=0
官网对于此的限制说明:
https://developer.android.com/reference/android/os/FileUriExposedException.html
The exception that is thrown when an application exposes a file:// Uri to another app.
This exposure is discouraged since the receiving app may not have access to the shared path. For example, the receiving app may not have requested the READ_EXTERNAL_STORAGE runtime permission, or the platform may be sharing the Uri across user profile boundaries.
Instead, apps should use content:// Uris so the platform can extend temporary permission for the receiving app to access the resource.
This is only thrown for applications targeting N or higher. Applications targeting earlier SDK versions are allowed to share file:// Uri, but it's strongly discouraged.
对于代码变化的说明:
在6.0的代码:
/frameworks/base/core/java/android/os/StrictMode.java
1752 /**
1753 * @hide
1754 */
1755 public static void onFileUriExposed(String location) {
1756 final String message = "file:// Uri exposed through " + location;
1757 onVmPolicyViolation(null, new Throwable(message));
1758 }
在7.0的代码:
/frameworks/base/core/java/android/os/StrictMode.java
1793 /**
1794 * @hide
1795 */
1796 public static void onFileUriExposed(Uri uri, String location) {
1797 final String message = uri + " exposed beyond app through " + location;
1798 if ((sVmPolicyMask & PENALTY_DEATH_ON_FILE_URI_EXPOSURE) != 0) {
1799 throw new FileUriExposedException(message);
1800 } else {
1801 onVmPolicyViolation(null, new Throwable(message));
1802 }
1803 }
android7.0后对于file://的限制的更多相关文章
- Android7.0后JNI库必须保留Section Headers
此修改在官网的描述如下: Each ELF file has additional information contained in the section headers. These header ...
- android7.0后对于detected problems with app native libraries提示框显示
log信息: 03-27 09:08:25.887 397 400 W linker : /data/app/com.guagua.qiqi-1/lib/arm/libMedia.so ha ...
- 拍照、本地图片工具类(兼容至Android7.0)
拍照.本地图片工具类:解决了4.4以上剪裁会提示"找不到文件"和6.0动态授予权限,及7.0报FileUriExposedException异常问题. package com.hb ...
- 【转】Android7.0适配心得
本文出自:贾鹏辉的技术博客(http://www.devio.org) http://www.devio.org/2016/09/28/Android7.0%E9%80%82%E9%85%8D%E5% ...
- Android7.0调用系统相机拍照、读取系统相册照片+CropImageView剪裁照片
Android手机拍照.剪裁,并非那么简单 简书地址:[我的简书–T9的第三个三角] 前言 项目中,基本都有用户自定义头像或自定义背景的功能,实现方法一般都是调用系统相机–拍照,或者系统相册–选择照片 ...
- Android7.0 Doze模式分析(一)Doze介绍 & DeviceIdleController
參考:http://blog.csdn.net/gaugamela/article/details/52981984 在Android M中.Google就引入了Doze模式.它定义了一种全新的 ...
- Android7.0 Phone应用源码分析(二) phone来电流程分析
接上篇博文:Android7.0 Phone应用源码分析(一) phone拨号流程分析 今天我们再来分析下Android7.0 的phone的来电流程 1.1TelephonyFramework 当有 ...
- Android7.0 Phone应用源码分析(一) phone拨号流程分析
1.1 dialer拨号 拨号盘点击拨号DialpadFragment的onClick方法会被调用 public void onClick(View view) { int resId = view. ...
- Android7.0 Phone应用源码分析(三) phone拒接流程分析
本文主要分析Android拒接电话的流程,下面先来看一下拒接电话流程时序图 步骤1:滑动按钮到拒接图标,会调用到AnswerFragment的onDecline方法 com.android.incal ...
随机推荐
- XmlNode.PrependChild 方法
using System; using System.IO; using System.Xml; public class Sample { public static void Main() { X ...
- oracle--高级使用(merge)(递归START WITH)分析函数over
1.俩种表复制语句 SELECT INTO和INSERT INTO SELECT两种表复制语句 CT: create table <new table> as select * from ...
- CentOS7 开机启动流程
- 初探LINUX之--基础知识篇
一 Linux哲学思想 1 一切都是一个文件(包含硬件) 2 小型,单一用途的程序 3 链接程序,共同完成复杂的任务 4 避免令人困惑的用户界面 5 配置数据存储在文本中 二 Linux重要概念 Sh ...
- D Makoto and a Blackboard
Makoto and a Blackboard time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- id 和 name 区别
在html中:name指的是用户名称,ID指的是用户注册是系统自动分配给用户的一个序列号. name是用来提交数据的,提供给表单用,可以重复: id则针对文档操作时候用,不能重复.如:document ...
- 浅谈原生JavaScript的动画和特效
一.JavaScript中的动画原理 动画效果的实现总的来说可分为两种,一种是利用纯css实现,该方法在css3成熟后广泛应用:另外一种是通过JavaScript(或者一些封装的库如jQuery的an ...
- 后台PDF返回Base64,前台接收预览
读取已存在的PDF文件,path为绝对路径 string base64String = "";byte[] buffer=null; using (FileStream fs = ...
- more - 在显示器上阅读文件的过滤器
总览 (SYNOPSIS) more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ] 描述 (DESCRIPTION) More 是 ...
- Sql Server 压缩数据库占用空间
1.删除数据库库中不必要的数据2. 在数据库上右击,任务,收缩,文件,在收缩操作上选择在未使用的空间前重新组织页,将文件收缩到的最后一行为最小为XXM,在前面的输入框中填入该值,然后点击确定3.分离该 ...