Android 6.0 读写SD卡权限问题(续)

之前出了个乌龙

接上一篇文章:Android 6.0 读写SD卡权限问题
STEP5、最简单的方法----push之后重启手机
1、修改了packages/apps/FMRadio/AndroidManifest.xml文件添加<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
2、修改packages/apps/FMRadio/src/com/android/fmradio/FmRecorder.java文件
添加import com.mediatek.storage.StorageManagerEx;语句
替换startRecording函数String recordingSdcard = FmUtils.getDefaultStoragePath();为String recordingSdcard = StorageManagerEx.getDefaultPath();

其实之前的方法是正确的,push修改后的FMRadio之后,重启一下手机即可。
当时没有生效的原因是,从L版本开始,apk直接push就不生效了,要push+重启才可以,因为PMS取消了各个路径下的observer,直接push不会生效,重启才会重新扫描。

这里向大家主要提到两个文件
1、电脑代码区文件:frameworks/base/data/etc/platform.xml
这个文件中定义了底层权限组GID和高层权限名字之间的对应关系
其实,在这个文件已经定义过了

<permission name="android.permission.WRITE_MEDIA_STORAGE" >
<group gid="media_rw" />
<group gid="sdcard_rw" />
</permission>

故我们只需要在AndroidManifest.xml,添加

<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />

即可grant FMRadio SD卡读写权限。
2、手机数据区文件:data/system/packages.xml
这个文件由PackageManagerService.Java生成,里面记录了系统当中安装的APK的所有属性,权限等信息。L之前,当系统中的APK安装、删除、升级时,文件就会被更新。L之后,重启才会重新扫描更新该文件。
push后,重启前

<package name="com.android.fmradio" codePath="/system/priv-app/FMRadio" nativeLibraryPath="/system/priv-app/FMRadio/lib" primaryCpuAbi="arm64-v8a" publicFlags="940097093" privateFlags="8" pkgFlagsEx="0" ft="151fd3402d8" it="158575d1d70" ut="151fd3402d8" version="2" userId="10010">
       <sigs count="1">
           <cert index="0" key=“……” />
       </sigs>
       <perms>
           <item name="android.permission.MODIFY_AUDIO_SETTINGS" granted="true" flags="0" />
           <item name="android.permission.MODIFY_AUDIO_ROUTING" granted="true" flags="0" />
           <item name="android.permission.ACCESS_MOCK_LOCATION" granted="true" flags="0" />
           <item name="android.permission.ACCESS_FM_RADIO" granted="true" flags="0" />
           <item name="android.permission.BLUETOOTH" granted="true" flags="0" />
           <item name="android.permission.INTERNET" granted="true" flags="0" />
           <item name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" granted="true" flags="0" />
           <item name="android.permission.INTERACT_ACROSS_USERS" granted="true" flags="0" />
           <item name="android.permission.WAKE_LOCK" granted="true" flags="0" />
       </perms>
       <proper-signing-keyset identifier="1" />
   </package>

重启后

   <package name="com.android.fmradio" codePath="/system/priv-app/FMRadio" nativeLibraryPath="/system/priv-app/FMRadio/lib" primaryCpuAbi="arm64-v8a" publicFlags="940097093" privateFlags="8" pkgFlagsEx="0" ft="151fda9d6e8" it="158575d1d70" ut="151fda9d6e8" version="2" userId="10010">
       <sigs count="1">
           <cert index="0" key="……" />
       </sigs>
       <perms>
           <item name="android.permission.MODIFY_AUDIO_SETTINGS" granted="true" flags="0" />
           <item name="android.permission.MODIFY_AUDIO_ROUTING" granted="true" flags="0" />
           <item name="android.permission.ACCESS_MOCK_LOCATION" granted="true" flags="0" />
           <item name="android.permission.ACCESS_FM_RADIO" granted="true" flags="0" />
           <item name="android.permission.BLUETOOTH" granted="true" flags="0" />
           **<item name="android.permission.WRITE_MEDIA_STORAGE" granted="true" flags="0" />**
           <item name="android.permission.INTERNET" granted="true" flags="0" />
           <item name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" granted="true" flags="0" />
           <item name="android.permission.INTERACT_ACROSS_USERS" granted="true" flags="0" />
           <item name="android.permission.WAKE_LOCK" granted="true" flags="0" />
       </perms>
       <proper-signing-keyset identifier="1" />
   </package>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容