Android7.0以上的SDK读取手机内存文件

业务场景:
拍照>保存>读取>上传
遇到的问题:
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。。。。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值