作者:许勇权
在调查图库中关于在内外存置卡之间移动/复制操作时,写了一个小程序测试在内外存储卡操作的可行性和性能问题,发现第三方应用无法访问外置存储卡。
调查后得知,在2.x的版本中,android手机只有/data/目录用于存放第三方应用和应用内部数据,在manifest中配置的权限“android.permission.WRITE_EXTERNAL_STORAGE”确实是用来使得sd卡获得写的权限。
但从4.0以后,android有了内外存储卡之分,很多手机加入了内部存储卡,部分手机保留了sd卡接口,于是上述权限只能用于访问内置存储卡,正常情况下,用户只对外置存储卡的android/data/[packagename]目录具有访问权限,用户要访问外部存储卡,需要加入”android.permission.WRITE_MEDIA_STORAGE”权限。
然而问题来了,加入该权限后,提示该权限只对系统应用起作用,(Permissionis only granted to system apps)。还好我就是系统应用,加入权限,修改为系统签名后,访问外置存储卡测试ok。
问题到这里貌似可以解决了,添加WRITE_MEDIA_STORAGE权限,修改为系统签名,可以对外置存储卡获得完全权限,但追根究底,第三方应用如何获取对外置存储卡的读写权限,于是继续百度,有一个方案是,可以修改/system/etc/permissions,,添加media_rw的权限,如下所示