android 9 申请动态权限android.permission.WRITE_EXTERNAL_STORAGE 允许后应用闪退

问题描述:如题,在调试android 9 高通msm8953平台时,客户反馈应用在允许Manifest.permission.WRITE_EXTERNAL_STORAGE权限后,应用闪退。
从log分析是
07-22 09:56:02.331 I/ActivityManager( 1658): Killing 9824:com.xxx.xxx/u0a123 (adj 100): permission grant or revoke changed gids
系统认为gids变了就要杀掉应用
参考:Android动态申请Camera权限应用闪退问题

系统侧根据android低版本的权限配置文件进行修改即可。

===================================================================
--- frameworks/base/data/etc/platform.xml	(版本 1246)
+++ frameworks/base/data/etc/platform.xml	(版本 1240)
@@ -60,6 +60,18 @@
         <group gid="log" />
     </permission>
 
-    <permission name="android.permission.READ_EXTERNAL_STORAGE" >
-        <group gid="sdcard_r" />
-    </permission>
-
-    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
-        <group gid="sdcard_r" />
-        <group gid="sdcard_rw" />
-        <group gid="sdcard_all" />
-        <group gid="camera" /> 
-        <group gid="media_rw" />
-    </permission>
-
     <permission name="android.permission.ACCESS_ALL_EXTERNAL_STORAGE" >
         <group gid="sdcard_r" />
         <group gid="sdcard_rw" />
@@ -73,10 +85,6 @@
         <group gid="media_rw" />
     </permission>
 
     <permission name="android.permission.ACCESS_MTP" >
         <group gid="mtp" />
     </permission>
@@ -139,8 +147,6 @@
          is negligible (one tag with the permission) compared to
          the fragility as one can remove a built-in permission which
          no longer needs to be mapped to gids and break grant propagation. -->
+    <permission name="android.permission.READ_EXTERNAL_STORAGE" />
+    <permission name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
     <!-- ================================================================== -->
     <!-- ================================================================== -->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android开发中,`android.permission.WRITE_EXTERNAL_STORAGE`是一个权限声明,它允许应用程序在设备的外部存储上写入数据。外部存储可以是SD卡或其他形式的可移动存储,也可以是设备的内部存储空间,这取决于Android版本以及用户的设备配置。 自Android 6.0(API级别23)开始,引入了运行时权限模型,用户可以在应用程序运行时授予或拒绝权限。为了申请`WRITE_EXTERNAL_STORAGE`权限应用程序需要在运行时向用户请求这个权限,并且处理用户的响应。以下是申请权限的基本步骤: 1. 在应用的`AndroidManifest.xml`文件中声明权限: ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 2. 检查并请求权限(通常在需要写入外部存储的Activity或Fragment中): ```java // 检查是否已经授予了写入权限 if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { // 如果未授予,则请求权限 ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE); } else { // 权限已经被授予,执行需要权限的代码 } ``` 3. 处理用户响应: ```java @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 权限被用户同意,可以写入外部存储 } else { // 权限被用户拒绝,应通知用户没有权限将无法执行某些操作 } } } ``` 在实现权限请求时,确保遵循Android的设计指南,如提供适当的权限解释,以及优雅地处理权限被拒绝的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值