Skip to content

Commit

Permalink
新增 Android 10 分区存储适配设置
Browse files Browse the repository at this point in the history
修复 Android 8.0 屏幕旋转崩溃的问题
优化错误检测机制相关的逻辑及补充文档
  • Loading branch information
getActivity committed Mar 5, 2021
1 parent e755bc9 commit 02e6f3d
Show file tree
Hide file tree
Showing 19 changed files with 526 additions and 329 deletions.
38 changes: 30 additions & 8 deletions HelpDoc.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,34 @@
#### 目录

* [安卓11定位权限适配](#安卓11定位权限适配)
* [Android 11 定位权限适配](#android-11-定位权限适配)

* [安卓11存储权限适配](#安卓11存储权限适配)
* [Android 11 存储权限适配](#android-11-存储权限适配)

* [我想在申请前和申请后统一弹对话框该怎么处理](#我想在申请前和申请后统一弹对话框该怎么处理)

* [如何在回调中判断哪些权限被永久拒绝了](#如何在回调中判断哪些权限被永久拒绝了)

* [框架为什么不兼容安卓6以下的权限申请](#框架为什么不兼容安卓6以下的权限申请)
* [框架为什么不兼容 Android 6 以下的权限申请](#框架为什么不兼容-android-6-以下的权限申请)

* [新版框架为什么移除了自动申请清单权限的功能](#新版框架为什么移除了自动申请清单权限的功能)

* [新版框架为什么移除了不断申请权限的功能](#新版框架为什么移除了不断申请权限的功能)

* [新版框架为什么移除了国产手机权限设置页功能](#新版框架为什么移除了国产手机权限设置页功能)

#### 安卓11定位权限适配
#### Android 11 定位权限适配

* 在 Android 10 上面,定位被划分为前台权限(精确和模糊)和后台权限,而到了 Android 11 上面,需要分别申请这两种权限,如果同时申请这两种权限会惨遭系统无情拒绝,连权限申请对话框都不会弹,立马被系统拒绝,直接导致定位权限申请失败。
* 在 Android 10 上面,定位权限被划分为前台权限(精确和模糊)和后台权限,而到了 Android 11 上面,需要分别申请这两种权限,如果同时申请这两种权限会**惨遭系统无情拒绝**,连权限申请对话框都不会弹,立马被系统拒绝,直接导致定位权限申请失败。

* 如果你使用的是 XXPermissions 最新版本,那么恭喜你,直接将前台定位权限和后台定位权限全部传给框架即可,框架已经自动帮你把这两种权限分开申请了,整个适配过程零成本
* 如果你使用的是 XXPermissions 最新版本,那么**恭喜你**,直接将前台定位权限和后台定位权限全部传给框架即可,框架已经自动帮你把这两种权限分开申请了,整个适配过程**零成本**

#### 安卓11存储权限适配
* 但是需要注意的是:申请过程分为两个步骤,第一步是申请前台定位权限,第二步是申请后台定位权限,用户必须要先同意前台定位权限才能进入后台定位权限的申请。同意前台定位权限的方式有两种:勾选 `仅在使用该应用时允许``仅限这一次`,而到了后台定位权限申请中,用户必须要勾选 `始终允许`,只有这样后台定位权限才能申请通过。

![](picture/location_1.jpg)

![](picture/location_2.jpg)

#### Android 11 存储权限适配

* 如果你的项目需要适配 Android 11 存储权限,那么需要先将 targetSdkVersion 进行升级

Expand Down Expand Up @@ -86,6 +92,22 @@ XXPermissions.with(this)

![](picture/7.jpg)

#### 什么情况下需要适配分区存储特性

* 如果你的应用需要上架 GooglePlay,那么需要详细查看:[谷歌应用商店政策(需要翻墙)](https://support.google.com/googleplay/android-developer/answer/9956427)

* 分区存储的由来:谷歌之前收到了很多用户投诉,说很多应用都在 SD 卡下创建目录和文件,导致用户管理手机文件非常麻烦(强迫症的外国网友真多,哈哈),所以在 Android 10 版本更新中,谷歌要求所有开发者将媒体文件存放在自己内部目录或者 SD 卡内部目录中,不过谷歌在一版本上采取了宽松政策,在清单文件中加入 `android:requestLegacyExternalStorage="true"` 即可跳过这一特性的适配,不过在 Android 11 上面,你有两种选择:

1. 适配分区存储:这个是谷歌推荐的一种方式,但是会增加工作量,因为分区存储适配起来十分麻烦,我个人感觉是这样的。不过对于一些特定应用,例如文件管理器,文件备份工具,防病毒应用等这类应用它们就一定需要用到外部存储,这个时候就需要用第二种方式来实现了。

2. 申请外部存储权限:这个是谷歌不推荐的一种方式,只需要 `MANAGE_EXTERNAL_STORAGE` 权限即可,适配起来基本无压力,但是会存在一个问题,就是上架谷歌应用市场的时候,要经过 Google Play 审核和批准。

* 这两种总结下来,我觉得各有好坏,不过我可以跟大家谈谈我的看法

1. 如果你的应用需要上架谷歌应用市场,需要尽快适配分区存储,因为谷歌这次来真的了

2. 如果你的应用只上架国内的应用市场,并且后续也没有上架谷歌应用市场的需要,那么你也可以直接申请 `MANAGE_EXTERNAL_STORAGE` 权限来读写外部存储

#### 我想在申请前和申请后统一弹对话框该怎么处理

* 在 Application 初始化的时候配置
Expand Down Expand Up @@ -214,7 +236,7 @@ XXPermissions.with(this)
});
```

#### 框架为什么不兼容安卓6以下的权限申请
#### 框架为什么不兼容 Android 6 以下的权限申请

* 因为 Android 6.0 以下的权限管理是手机厂商做的,那个时候谷歌还没有统一权限管理的方案,所以就算我们的应用没有适配也不会有任何问题,因为手机厂商对这块有自己的处理,但是有一点是肯定的,就算用户拒绝了授权,也不会导致应用崩溃,只会返回空白的通行证。

Expand Down
Loading

0 comments on commit 02e6f3d

Please sign in to comment.