业务场景:
拍照>保存>读取>上传
遇到的问题:
Android7.0以上的SDK读取手机内存文件时候,读取不到手机的文件,并导致空指针异常。
原因:
谷歌在Android7.0以上的SDK读取手机内存文件时候,改变了原有的版本的读取方式:
7.0以下的读取路径为:
Environment.getExternalStorageDirectory( ) : 得到当前app所在手机的sdcard位置/storage/sdcard
Environment.getExternalStoragePublicDirectory(String type) : 得到当前app所在手机的sdcard位置下的公共子文件夹/storage/sdcard/
而7.0以上的路径为:
content://XXXX/myFile/xxxxx.apk
是不是很意外,路径都变了,怎么回事?
看看谷歌的解释:
Android7.0的禁止不安全路径被外部访问。
那么这个问题怎么破呢?
就是怎么样绕过7.0设置这样一个防线呢?
在网上看到一个大神的博客,就几句代码搞定,亲测很好用:
主要的原理就是置入一个不设防的VmPolicy!
//置入一个不设防的VmPolicy
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
}
bingo。。。。