android手机定位p适配,Android 9(P)版本适配指南
一、針對所有應用的行為變更
隱私權變更
1、后臺對傳感器的訪問受限
Android 9 限制后臺應用訪問用戶輸入和傳感器數據的能力。 如果您的應用在運行 Android 9 設備的后臺運行,系統將對您的應用采取以下限制:
您的應用不能訪問麥克風或攝像頭。
使用連續報告模式的傳感器(例如加速度計和陀螺儀)不會接收事件。
使用變化或一次性報告模式的傳感器不會接收事件。
如果您的應用需要在運行 Android 9 的設備上檢測傳感器事件,請使用前臺服務。
2、限制訪問通話記錄
對于需要訪問通話敏感信息(如讀取通話記錄和識別電話號碼)的應用,該 CALL_LOG 權限組為用戶提供了更好的控制和可見性。
如果您的應用需要訪問通話記錄或者需要處理去電,則您必須向 CALL_LOG 權限組明確請求這些權限。 否則會發生 SecurityException。
3、限制訪問電話號碼
在未首先獲得 READ_CALL_LOG 權限的情況下,除了應用的用例需要的其他權限之外,運行于 Android 9 上的應用無法讀取電話號碼或手機狀態。
與來電和去電關聯的電話號碼可在手機狀態廣播(比如來電和去電的手機狀態廣播)中看到,并可通過 PhoneStateListener 類訪問。 但是,如果沒有 READ_CALL_LOG 權限,則 PHONE_STATE_CHANGED 廣播和 PhoneStateListener 提供的電話號碼字段為空。
要從手機狀態中讀取電話號碼,請根據您的用例更新應用以請求必要的權限:
強制執行 FLAG_ACTIVITY_NEW_TASK 要求
在 Android 9 中,您不能從非 Activity 環境中啟動 Activity,除非您傳遞 Intent 標志 FLAG_ACTIVITY_NEW_TASK。
如果您嘗試在不傳遞此標志的情況下啟動 Activity,則該 Activity 不會啟動,系統會在日志中輸出一則消息。
注:在 Android 7.0(API 級別 24)之前,標志要求一直是期望的行為并被強制執行。 Android 7.0 中的一個錯誤會臨時阻止實施標志要求。
屏幕旋轉變更
從 Android 9 開始,對縱向旋轉模式做出了重大變更。 在 Android 8.0(API 級別 26)中,用戶可以使用 Quicksettings 圖塊或 Display 設置在自動屏幕旋轉和縱向旋轉模式之間切換。 縱向模式已重命名為旋轉鎖定,它會在自動屏幕旋轉關閉時啟用。 自動屏幕旋轉模式沒有任何變更。
當設備處于旋轉鎖定模式時,用戶可將其屏幕鎖定到頂層可見 Activity 所支持的任何旋轉。 Activity 不應假定它將始終以縱向呈現。 如果頂層 Activity 可在自動屏幕旋轉模式下以多種旋轉呈現,則應在旋轉鎖定模式下提供相同的選項,根據 Activity 的 screenOrientation 設置,允許存在一些例外情況(見下表)。
請求特定屏幕方向(例如,screenOrientation=landscape)的 Activity 會忽略用戶鎖定首選項,并且行為與 Android 8.0 中的行為相同。
旋轉鎖定模式通過設置 WindowManager 在處理 Activity 旋轉時使用的用戶旋轉首選項來發揮作用。 用戶旋轉首選項可能在下列情況下發生變更。 請注意,恢復設備的自然旋轉存在偏差,對于外形與手機類似的設備通常設置為縱向:
當用戶接受旋轉建議時,旋轉首選項變為建議方向。
當用戶切換到強制縱向應用(包括鎖定屏幕或啟動器)時,旋轉首選項變為縱向。
下表總結了常見屏幕方向的旋轉行為:
屏幕方向
行為
未指定、user
在自動屏幕旋轉和旋轉鎖定下,Activity 可以縱向或橫向(以及顛倒縱向或橫向)呈現。 預期同時支持縱向和橫向布局。
userLandscape
在自動屏幕旋轉和旋轉鎖定下,Activity 可以橫向或顛倒橫向呈現。 預期只支持橫向布局。
userPortrait
在自動屏幕旋轉和旋轉鎖定下,Activity 可以縱向或顛倒縱向呈現。 預期只支持縱向布局。
fullUser
在自動屏幕旋轉和旋轉鎖定下,Activity 可以縱向或橫向(以及顛倒縱向或橫向)呈現。 預期同時支持縱向和橫向布局。旋轉鎖定用戶將可選擇鎖定到顛倒縱向,通常為 180o。
sensor、fullSensor、sensorPortrait、sensorLandscape
忽略旋轉鎖定模式首選項,視為自動屏幕旋轉已啟用。 請僅在例外情況下并經過仔細的用戶體驗考量后再使用此項。
二、行為變更:以 API 級別 28 及更高級別為目標的應用
前臺服務
如果應用以 Android 9 或更高版本為目標平臺并使用前臺服務,則必須請求 FOREGROUND_SERVICE 權限。這是普通權限,因此,系統會自動為請求權限的應用授予此權限。
如果以 Android 9 或更高版本為目標平臺的應用嘗試創建前臺服務且未請求 FOREGROUND_SERVICE,則系統會拋出 SecurityException。
隱私權變更
如果您的應用以 Android 9 為目標平臺,則您應牢記以下行為變更。這些針對設備序列信息和 DNS 信息做出的更新可增強用戶隱私保護。
1、構建序列號棄用
在 Android 9 中,Build.SERIAL 始終設為 "UNKNOWN",以保護用戶隱私。
如果您的應用需要訪問設備的硬件序列號,您應改為請求 READ_PHONE_STATE 權限,然后調用 getSerial()。
2、DNS 隱私權
以 Android 9 為目標平臺的應用應采用私有 DNS API。具體而言,應用應確保,當系統解析器正在通過傳輸層安全協議 (TLS) 執行 DNS 時,任何內置的 DNS 客戶端均使用加密的 DNS 查找與系統相同的主機名,或停用它而改用系統解析器。
框架安全性變更
Android 9 包含多項可提升應用安全性的行為變更,但這些變更僅在應用以 API 級別 28 或更高級別為目標平臺時才會生效。
1、默認啟用網絡傳輸層安全協議 (TLS)
如果您的應用以 Android 9 或更高版本為目標平臺,則 isCleartextTrafficPermitted() 方法默認返回 false。如果您的應用需要針對特定網域啟用明文,則您必須在應用的網絡安全配置中,針對這些網域明確將 cleartextTrafficPermitted 設置為 true。
2、按進程分設基于網絡的數據目錄
在 Android 9 中,為改善應用穩定性和數據完整性,應用無法再讓多個進程共享一個 WebView 數據目錄。通常情況下,此類數據目錄會存儲 Cookie、HTTP 緩存以及其他與網絡瀏覽有關的持久性和臨時性存儲。
在大多數情況下,您的應用應僅在一個進程中使用 android.webkit 軟件包中的類(如 WebView 和 CookieManager)。例如,您應該將使用 WebView 的所有 Activity 對象移入同一進程。您可以通過在應用的其他進程中調用 disableWebView(),更嚴格地執行“僅限一個進程”規則。該調用可防止 WebView 在這些其他進程中被錯誤地初始化,即使是從依賴內容庫進行的調用也能防止。
如果您的應用必須在多個進程中使用 WebView 實例,則您必須先使用 WebView.setDataDirectorySuffix() 方法為每個進程指定唯一的數據目錄后綴,然后再在相應進程中使用 WebView 的給定實例。該方法會將每個進程的網絡數據放入應用數據目錄內其自己的目錄中。
即使使用 setDataDirectorySuffix(),系統也不會跨應用的進程界限共享 Cookie 以及其他網絡數據。如果應用中的多個進程需要訪問同一網絡數據,您需要自行在這些進程之間復制該數據。例如,您可以調用 getCookie() 和 setCookie(),以在不同的進程之間手動傳輸 Cookie 數據。
總結
以上是生活随笔為你收集整理的android手机定位p适配,Android 9(P)版本适配指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成员变量和局部变量的区别_Java 变量
- 下一篇: android指纹java_Androi