android 7.0 禁止 imei,Android一些适配
# Android 版本適配重點
其他細節請查看官網對應版本:https://developer.android.com/preview
## 7.0
1. 后臺優化
- 移除了以下靜態注冊廣播通知(動態注冊可繼續使用):CONNECTIVITY_ACTION? ACTION_NEW_PICTURE ACTION_NEW_VIDEO
2. 系統權限更改
- Android 7.0 或更高版本的應用私有目錄被限制訪問,傳遞軟件包網域外的 file:// URI 可能給接收器留下無法訪問的路徑。因此,嘗試傳遞 file:// URI 會觸發 FileUriExposedException。分享私有文件內容的推薦方法是使用 FileProvider,并授予 URI 臨時訪問權限
- DownloadManager 不再按文件名分享私人存儲的文件。舊版應用在訪問 COLUMN_LOCAL_FILENAME 時可能出現無法訪問的路徑。面向 Android 7.0 或更高版本的應用在嘗試訪問 COLUMN_LOCAL_FILENAME 時會觸發 SecurityException。通過使用 DownloadManager.Request.setDestinationInExternalFilesDir() 或 DownloadManager.Request.setDestinationInExternalPublicDir() 將下載位置設置為公共位置的舊版應用仍可以訪問 COLUMN_LOCAL_FILENAME 中的路徑,但是我們強烈反對使用這種方法。對于由 DownloadManager 公開的文件,首選的訪問方式是使用ContentResolver.openFileDescriptor()。
file:// 類型的Uri無法使用,需要使用FileProvider轉換
3. 多窗口模式
3.1 適配多窗口模式
https://developer.android.com/guide/topics/ui/multi-window?hl=zh_cn
3.2 關閉多窗口模式
在清單的 activity 或 application 元素中設置此屬性,以啟用或停用多窗口顯示:
```html
android:resizeableActivity=["true" | "false"]
```
## 8.0
1. 后臺執行限制
- 嘗試在不允許其創建后臺服務的情況下使用 startService() 函數,則該函數將引發一個 IllegalStateException
應使用startForegroundService函數,并且應用必須在創建服務后的五秒內調用該服務的 startForeground() 函數
2. 應用快捷鍵
https://developer.android.com/about/versions/oreo/android-8.0-changes?hl=zh-cn#as
3. 通知
針對 8.0 的應用,創建通知前需要創建渠道,創建通知時需要傳入 channelId,否則通知將不會顯示
4. 升級
針對 8.0 的應用需要在 AndroidManifest.xml 中聲明 REQUEST_INSTALL_PACKAGES 權限,否則將無法進行應用內升級
5. 桌面圖標(不強制,但是桌面圖片顯示會有白底)
https://mp.weixin.qq.com/s/WxgHJ1stBjokPi6lTUd1Mg
6. 廣播
移除所有為隱式廣播 Intent 注冊的廣播接收器,改為動態注冊
7. 安裝apk
需要增加權限
```html
```
## 9.0
1. 前臺服務
應用以 Android 9 或更高版本為目標平臺并使用前臺服務,則必須請求 FOREGROUND_SERVICE 權限,系統會自動為請求權限的應用授予此權限,如果不請求 FOREGROUND_SERVICE權限將會報錯,Manifest加入:
```html
```
2. 網絡
使用https或者加入配置項android:networkSecurityConfig
3. Apache HTTP 客戶端棄用
所以要想繼續使用Apache HTTP,需要在應用的 AndroidManifest.xml 文件中添加
```html
```
4. 啟動Activity
不能直接非 Activity 環境中(比如Service,Application)啟動 Activity,否則會崩潰報錯,需要Intent 中添加標志FLAG_ACTIVITY_NEW_TASK
## 10
1. 禁止后臺啟動Activity
使用通知觸發,需要在AndroidManifest上增加權限USE_FULL_SCREEN_INTENT申明
2. 設備硬件信息讀取限制,AndroidId,IMEI不可獲取
3. Scope Store
可以使用以下配置停用分區存儲
- 如果targetSdkVersion < 29,那么不用處理
- 如果targetSdkVersion >= 29,加入一下配置
```html
Android 10 or higher. -->
...
```
使用分區存儲,如果不需要訪問其他應用的公開文件,則不需要申請讀寫權限READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE
- 內部存儲
可使用原有File API訪問方式
- 外部存儲
1. 外部公開目錄
可供其他應用和用戶自由訪問的文件,卸載您的應用后,這些文件應該仍然可供用戶使用
只有通過MediaStore API或者SAF(可在任意目錄下新建文件,但是是通過用戶交互方式),并且限制目錄只能為媒體文件或者下載目錄,無法使用File API訪問
- 如果要保存照片、音頻文件或視頻剪輯,請使用 MediaStore API
- 如果要保存任何其他文件(如 PDF 文檔),請使用 ACTION_CREATE_DOCUMENT intent,這是存儲訪問框架(SAF的一部分。此操作會調起系統UI界面
2. 外部私有目錄
使用getExternalFilesDir()函數訪問,后續操作可使用File API
卸載應用時會被清除,調用 getExternalFilesDir() 并傳入指明您想要的目錄類型的名稱來獲取特定于應用的目錄,或調用getExternalFilesDir()傳入自定義文件夾名稱
```kotlin
//固定圖片目錄
getExternalFilesDir(DIRECTORY_PICTURES)
//自定義目錄
getExternalFilesDir("myDir")
```
4. 后臺定位權限
需要ACCESS_BACKGROUND_LOCATION權限
5. 限制使用非SDK接口
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的android 7.0 禁止 imei,Android一些适配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸿蒙开发者社区入口,鸿蒙OS 社区
- 下一篇: 双路由器桥接设置图解(双个路由器怎么进行