Android盒子开发总结:基于6.0系统,关于刷到系统的app读取不到U盘文件的问题

本文主要探讨在Android 6.0系统下,一个系统级应用在遇到无法读取U盘文件的问题,尤其是在动态权限管理的背景下。作者在尝试动态获取权限和修改清单文件权限后,发现即使清单文件配置了读写权限,仍无法直接读取U盘文件。最终通过对比系统设置应用的权限,找到了解决问题的方法,即需要特定的U盘访问权限。
摘要由CSDN通过智能技术生成

最近在做电视盒子,系统是6.0的,我负责的模块是更新模块。用的是增量更新,关于增量更新不多说,就是用阿里的工具。我负责的就是将下载的文件放到指定的目录(/cache/update.zip)下,这都是超级简单的。但更新的模块里有一个小功能就是U盘更新:就是遍历U盘的一级目录,找到指定的增量包(压缩文件),复制移动到指定目录下(/cache/update.zip)。这边的代码也超级简单,百度一大把。

4.4盒子(公司的旧盒子)一点问题没有,但6.0(公司的新盒子)就有问题,主要是读不了U盘的文件,file.listfile()==null,也就是遍历U盘的目录为空,期初以为是权限没动态获取,毕竟6.0,有些危险权限还是要尊重的。但核心论点来了。

1.我是不是可以认为,当盒子刷到系统里的时候,只要我在清单文件配置了权限,都不需要对这些权限做动态获取。

//从目前的调试结果看,我认为这一点应该是真命题。

2.是不是我动态获取了读写权限,我就可以在任意位置读写。

//我写过一个demo,运行在6.0的小米手机上,我就无法将文件写到/mnt下,但可以写到/mnt/sdcard下


这几天我遇到的问题是,当我这个app刷到系统的时候,监听到了U盘的热插拔,获得了U盘的路径,但遍历U盘的时候,listfile就是null,且就算我读取U盘的特定文件也会出错(权限有关的问题)。因为是刷到系统的,且我的清单文件也有读写权限,并且我事先在没刷盒子之前动态获取权限调试过是通过的,但一刷到系统(去除动态获取)就是有问题。所以我就认为是系统有问题,但系统那边又说他自己写过demo,在系统setting下编写从U盘copy文件到指定目录是没问题。


僵持不下,我就用了两种方案调试,

1.添加动态获取权限(读写)的代码,然后让系统打包刷机,测试是成功的但需要动态获取

2.将系统setting的权限都考到我的app清单文件下(我怀疑是少了某个权限),果不其然,测试成功。

总结:当app刷到系统目录下,是不需要动态获取权限的,但如果只有读写权限,是无法读到U盘上的文件的,至于需要的事哪个,我还没有找出,只能一锅端的全拿来。

 <!-- 系统升级权限 -->
    <uses-permission android:name="android.permission.REBOOT"/>
    <uses-permission android:name="android.permission.RECOVERY" />
    <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

   <!-- //系统设置的所有权限-->

    <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
    <uses-permission android:name="android.permission.DEVICE_POWER" />
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
    <uses-permission android:name="android.permission.NFC" />
    <uses-permission android:name="android.permission.HARDWARE_TEST" />
    <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.MASTER_CLEAR" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH" />
    <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIMAX_STATE" />
    <uses-permission android:name="android.permission.C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值