官網 [Android Q預覽](https://developer.android.com/about/versions/10)
項目中的 `targetSdkVersion` 改為 `29(10.0)` 。
[Android Q版本應用兼容性適配指導](https://blog.csdn.net/irizhao/article/details/94121551) 這篇文章進行了全面的講述。
下面我只從中記錄一下一般項目中會遇見的場景。
## 分區存儲
在 `Scoped Storage` 新特性中,外部存儲空間被分為兩部分:
- 公共目錄:`Downloads`、`Documents`、`Pictures` 、`DCIM`、`Movies`、`Music`、`Ringtones`等
- 公共目錄下的文件在APP卸載后,不會刪除。
- APP可以通過SAF(System Access Framework)、MediaStore接口訪問其中的文件。
- App-specific目錄
- APP卸載后,數據會清除。
- APP的私密目錄,APP訪問自己的App-specific目錄時無需任何權限。
在`Android Q`上,`targetSDK`大于或等于`29`的`APP`默認被賦予`Filtered View`,反之則默認被賦予`Legacy View`。`APP`可以在`AndroidManifest.xml`中設置新屬性`requestLegacyExternalStorage`來修改外部存儲空間視圖模式,`true`為`Legacy View`,`false`為`Filtered View`。可以使用`Environment.isExternalStorageLegacy()`這個`API`來檢查`APP`的運行模式。APP開啟`Filtered View`后,`Scoped Storage`新特性對APP生效。
`Android Q`除了劃分外部存儲和定義`Filtered View`,還在查詢、讀寫文件的一些細節上做了改進或限制,例如圖片文件中的地理位置信息將不再默認提供、查詢`MediaProvider`獲得的`DATA`字段不再可靠、新增了文件的`Pending`狀態等等。
小米AndroidQ適配:https://dev.mi.com/console/doc/detail?pId=1697?
華為AndroidQ適配:https://developer.huawei.com/consumer/cn/devservice/doc/50127
OPPO AndroidQ適配:https://open.oppomobile.com/wiki/doc#id=10432
VIVO AndroidQ適配:https://vcl.vivo.com.cn/#/home/index
## 禁止應用讀取設備標識符信息
1. `TargetSdkVersion<Q`并且沒有申請`READ_PHONE_STATE`權限,或者`TargetSdkVersion>=Q`,獲取`device id`會拋異常`SecurityException`;
2. `TargetSdkVersion<Q`并且申請了`READ_PHONE_STATE`,通過`getDeviceId`接口讀取的值為`Null`;
3. 無法獲取到`device id`,會對應用依賴`device id`的功能產生影響。
## 禁止后臺應用啟動Activity
安卓`Q`版本限制了應用后臺啟動`Activity`,該變更的目的是最大限度減少后臺應用彈界面對用戶的打擾,在`Android Q`上運行的應用只有在滿足以下一個或多個條件時才能啟動`Activity`
1. 應用處于前臺;
2. 桌面`widget`點擊啟動`Activity`;
3. 由桌面點擊啟動應用;
4. 由`Recent`點擊啟動應用;
5. 前臺應用啟動后臺應用;
6. 臨時白名單機制,不攔截通過通知拉起的應用。
1. 應用通過通知,在pendingintent中啟動activity;
2. 應用通過通知,在pendingintent中發送廣播,接收廣播后啟動activity,加入臨時白名單不攔截。
3. 應用通過通知,在pendingintent中啟動service,在service中啟動activity,加入臨時白名單不攔截。
## 后臺應用地理位置權限
`Android Q`針對位置信息新增了`ACCESS\_BACKGROUND\_LOCATION`權限,以管控應用是否可以在后臺訪問位置信息。原有的`ACCESS\_COARSE\_LOCATION`和`ACCESS\_FINE\_LOCATION`權限用于管控應用在前臺是否可以獲取位置信息。
## 支持so問價的64位架構
## 非SDK接口管控
`Google`認為非公開接口可能在不同版本之間進行變動從而導致應用兼容性問題,因此從`Android P`開始強制約定三方應用只能使用`Android SDK`公開的類和接口;對于非公開的`API,Google`按照不同名單類型進行不同程度的限制使用。
## WIFI相關接口變更
`Android Q`為了更好的保護用戶的隱私,讓用戶知曉應用對`Wi-Fi`配置的改動,其限制了應用對`WifiManager`重要接口的調用,三方應用將無法正常使用這些接口。此外,針對`Wi-Fi Direct`相關的廣播以及接口也做了調整。
- 寫在前面的話
- Java
- 基礎
- Double的比較
- 小數怎么用二進制表示
- 多線程
- 并發和并行
- 線程池
- 線程池背景
- 線程池構造
- 任務阻塞隊列
- Flutter
- 基礎知識
- Dart基礎
- Android
- 項目架構
- View
- 非UI線程更新View
- AlarmManager
- 對比postDelaryed和Timer
- Bitmap
- 加載100M的圖片卻不撐爆內存
- Bitmap壓縮
- Bitmap局部解碼
- 計算圖片的內存占用
- Android動畫
- Android動畫類型
- Android動畫原理
- 屬性動畫
- 幀動畫
- 補間動畫
- 使用動畫的注意事項
- Android新特性
- 權限組
- Android23(Marshmallow)-6.0
- Android24(Nougat)-7.0
- Android26(Oreo)-8.0
- Android28(Pie)-9.0
- Android29(Q)-10.0
- AndroidX遷移
- Kotlin
- 關鍵字
- Kotlin操作符
- CoroutineScope
- Flow
- CoroutineException