1. 程式人生 > >Android Q 相容那些事

Android Q 相容那些事

5 月 20 號參加了 Android Q Labs,因此本篇說一說會議的部分內容以及自己的一些想法。

會議主要是加深開發者對 Android Q 的瞭解,從而幫助開發者做好 Android Q 的相容工作。

因此本篇我會選擇性說明一些在 Android Q 上你需要相容的一些事情。

1. 後臺 Activity 啟動限制

首先我們說說為什麼要限制後臺 Activity 的啟動。

Android Q 之前的情況如下:

考慮下面的幾個場景:

  1. 我在開車過程中使用導航地圖進行導航
  2. 我在使用拍照功能拍攝一個關鍵場景的視訊
  3. 我在玩遊戲,比如王者榮耀,正準備團戰拿五殺的時刻
    ......

假設在上面的幾個場景中,突然後臺 Activity 彈出一個框,可能是廣告框,也可能是搶佔我介面的其他介面。

這個時候我覺得內心是奔潰的,而且使用者體驗超級不好。

基於此,Android Q 裡面引入了對後臺 Activity 啟動的限制。

注意關鍵的一個點是這個變化對所有在 Android Q 上執行的應用都會有影響。無論你的 targetSDK 版本。

所以如果你的 APP 存在這種場景的情況下,你就需要做一下額外處理了。

基本的處理方式是通過 Notification 彈一個通知,如果使用者想點再點選進入你的 Activity。

那麼現在有哪些 APP 會用到這種呢?舉一個大家熟悉的。

這邊測試了一下,微信語音通話是會直接從後臺啟動全屏覆蓋的,所以可能微信需要針對這個行為變更做處理。

2. 儲存的變化

先看下 Q 之前的情況:

Q 的變化分兩部分來說明吧。

一部分是 MediaStore 的處理,另一部分是分割槽儲存的處理。

先說說 MediaStore,什麼是 MediaStore 呢?

對於 MediaStore,Q 的處理如下:

可以看到對於 MediaStore,可以直接寫,讀的話僅僅限於自己寫進去的檔案。如果要檢視其它應用提供的內容,需要獲取讀許可權。

另外你會發現 MediaStore 上面只有媒體相關的,如果檔案是非媒體型別呢?所以 Q 新增 MediaStore.Downloads,如下:

總結起來如下:

許可權的變更:在沒解除安裝的情況下,自己 APP 寫或者讀 MediaStore 媒體檔案不需要許可權。讀其他的需要許可權。解除安裝後讀自己之前寫入的也需要許可權。

另外還有一個就是圖片有一個位置資訊,這個對使用者來說也是隱私,因此需要做額外處理。

說完了 MediaStore,接下來說說分割槽儲存。

總結起來就是分割槽儲存模式下,不能夠再直接訪問 /sdcard 下的檔案,而要通過 MediaStore 或者 SAF。當然自己 packagename 命名的目錄下面還是可以訪問的。

另外目前可以通過在清單檔案設定是否啟用。可以設定 targetSDK 為 Q 的應用不啟用,也可以設定 targetSDK 低於 Q 的啟用。通過程式碼可以確認是否處於分割槽儲存模式下。

推薦儘快完成適配,因為目前是為了給開發者更多時間適應這個變化,等到下一個版本 Android R 的時候會強制執行分割槽儲存模式,到時候清單檔案的設定也是沒用的。因此強烈建議將這個工作排上相容行程。當然在 Q 的相容上可以根據自身業務進度進行設定,假設時間不夠,可以暫時不啟用,但是後續需要排期處理。

3. 位置許可權

我們看看 Android P 申請位置許可權的對話方塊:

可以看到只有允許和拒絕兩個選項。

現在看看 Android Q 的:

會發現多了一些選項,其中有一個僅在使用該應用時允許。

在 Android P 的時候,清單檔案只需要申請一個許可權:

而在 Q 上面,有兩個,其中一個有 background 的。

之所以有兩個,就是希望儘量少的獲取許可權,除非是你的 APP 真的有這個需求。在申請的時候也建議增量申請,什麼意思呢?

首先第一步先獲取位置許可權:

在使用者允許的情況下,如果 APP 需要,再進行增量許可權請求:

推薦的位置許可權最佳實踐如下:

4. 深色主題

Q 支援深色主題,相容有兩種方式。

一種就是簡單粗暴,適合時間少的。
一種就是推薦的,適合有足夠時間的。

簡單的方式如果是全域性設定,只需要設定主題即可:

如果你需要對單個 View 做設定,也是可以的:

推薦的方式是使用 DayNight。

不過我在測試區啟動深色主題時發現有點卡,估計後面系統還需要優化。

5. BubbleView 和指紋識別

BubbleView 其實就是懸浮窗。指紋識別也是 Android Q 引入的一個官方方式。
這個不需要做相容,算是新功能,這裡不贅述。

6. Kotlin vs Flutter

其實在程式碼演示的時候,我注意到 PPT 上面的程式碼基本都是 Kotlin。

包括之前的 Kotlin-first 以及這次 Q & A 環節也有小夥伴提問到底 Google 主推 Kotlin 還是 Flutter。

我這邊說下我的看法吧。

我覺得 Kotlin 和 Flutter 不衝突。

首先第一個 Kotlin 是一門語言,而 Flutter 是一個跨平臺方案。

如果你的 APP 有跨平臺的需求,或者有很多頁面需要開發,人手不足,功能迭代比較頻繁,那麼你可以瞭解或者嘗試使用 Flutter 來開發介面。一套程式碼,兩端執行。尤其 Flutter 1.5 佈局很廣,涵蓋了移動端、Web、桌面端和嵌入式。

對於 Android 開發者,可以看我的 Flutter 即學即用系列部落格快速入門。

說完了 Flutter,說下 Kotlin 吧。

Kotlin 是一門語言,語言是幹嘛的?是實現我們業務的工具。

假設現在 Java 和 Kotlin 都可以實現我們的業務功能,並且官方都支援這兩種語言,你有必要花很多時間去單獨學習 Kotlin 嗎?我覺得沒太大必要。

所以我覺得對待 Kotlin 你可以瞭解一下,能夠看懂 Kotlin 程式碼,會寫簡單的 Demo,我覺得就夠了。

當然如果你時間足夠,想多學一門語言,完全沒問題。

以上是參加這次會議的一些簡單總結和看法,更多內容通過下面的全程錄影瞭解。

本次 Android Q Labs 全程錄影可以通過連結觀看:Android Q Labs

相關推薦

Android Q 相容那些

5 月 20 號參加了 Android Q Labs,因此本篇說一說會議的部分內容以及自己的一些想法。 會議主要是加深開發者對 Android Q 的瞭解,從而幫助開發者做好 Android Q 的相容工作。 因此本篇我會選擇性說明一些在 Android Q 上你需要相容的一些事情。 1. 後臺 Acti

Android textview 花裡胡哨 那些

1.文字畫出來 https://github.com/totond/TextPathView 2.跑馬燈 https://github.com/Marksss/AndroidAutoSwitcher https://github.com/dreamlivemeng/UpMarquee

android 開發錄音那些(錄音許可權授權及判斷錄音許可權是否拒絕處理)

在專案開發錄音功能是,OnTouchListener呼叫時使用錄音功能,接下來就總結下開發過程中遇到的問題及解決辦法: (1)第一次點選時會跳出選擇是否授權錄音許可權的對話款,操作後會發現程式崩掉,怎麼來監測彈出授權對話方塊呢?這是一個十分困擾的問題對吧,經過本人就Moti

搞懂 Android Studio 構建那些

1.Android 構建系統構建 APK 的過程是個相當複雜的過程,Android 構建系統需要將應用的資原始檔和原始檔一同打包到最終的 APK 檔案中。應用可能會依賴一些外部庫,構建工具要靈活地管理這些依賴的下載、編譯、打包(包括合併、解決衝突、資源優化)等過程。應用的原始

關於android資原始檔那些

很多時候,我們拿到一個開發到一半的專案來接手做的時候,很多時候 都感覺一團亂麻,有的是沒註釋,有的是程式碼可讀性差,各種引數,數值隨意放,這時候我們就需要把他們放到他們該去的地方,減少專案的維護難度,為後來接鍋的人留條活路。 在android中的資源指的是非程式碼部分的,指

Android HOME鍵那些

       遊戲中常常需要監聽android HOME鍵,當HOME鍵下壓時,往往需要做一些狀態儲存,音效停止等操作,那麼如何做,才能監聽到HOME鍵呢?我們知道HOME是系統鍵,app中無法通過onKey這些函式來處理。要妥善的處理HOME鍵,首先需要看看HOME鍵下壓

Android Studio 構建那些

Android 構建系統 概述 構建 APK 的過程是個相當複雜的過程,Android 構建系統需要將應用的資原始檔和原始檔一同打包到最終的 APK 檔案中。應用可能會依賴一些外部庫,構建工具要靈活地管理這些依賴的下載、編譯、打包(包括合併、解決衝突、資

Android Studio 那些|Activity文件前標識圖標顯示為 j 而是 c

div roi 右下角 ext blog 識圖 cti 問題: content 問題:Activity文件前標識圖標顯示為 j 而是 c 的圖標,或是沒有顯示,並且自己主動提示不提示 解決:這是由於你的studio設置了省電模式,你能夠通過 File>

分享一下身邊朋友自學android開發及找工作的那些!【不足勿噴】

自己的 tis 快速 就是 和我 and 好處 adapt 分享 寫在前面 前不久身邊一個朋友突然告訴我他把原來的工作辭掉了,我問他最近在幹嘛,他說他最近兩個月學了java及android然後花了1周時間找工作,我問他現在怎麽樣了。他說比不上我們身邊這些10K-20K的現在

Android Studio使用的那些(三)AS不同版本安裝注意點

繼上篇遷移整理了 Android Studio使用的那些事(二)AS常見錯誤 這篇將整理記錄Android Studio我在使用更新不同版本時候所遇到要注意的點。Android Studio當時的1.2、1.5 我就沒有記錄了,因為當時AS還不夠成熟問題還很多,雖然下載安裝了

Android Studio使用的那些(二)AS常見錯誤(持續更新)

繼上篇遷移整理了 Android Studio使用的那些事(一)安裝、重灌、啟動問題 這篇將整理遇到常見的錯誤和問題 常見錯誤 1、AS中的專案路徑,不能包含中文 Error:(1, 0) Your project path contains non-ASC

Android Studio使用的那些(一)安裝、重灌、啟動

今天開啟Android Studio歡迎介面突然就變了,建立新專案、開啟以前專案真的是一臉懵逼!如下圖: 以為是哪裡配置的問題倒騰了半個小時沒倒騰明白,然後去網上搜索各種關鍵字都是講一些AndroidStudio安裝啟動配置的事情,沒能解決最後靈機一試解決了。然後就順便想把網易部落格以

Android禁用橫豎屏切換那些

序 在Android中,我們經常遇到橫豎屏切換的問題,可是在目前的大多數介面我們是不需要支援橫豎屏切換的,這時候就需要禁用它,下面介紹常用的禁用方法。 禁用方法一: 在清單檔案中: <activity android:name=".MainActivity

Android 程序保活資料彙總與華為白名單那些

現在發現App在後臺執行越來越難了。App在華為手機後臺死的非常快,之前看網上說華為有白名單,網上也通過改包名的方式來驗證了。但是半信半疑的,直到諮詢了華為的客服給了一個郵箱 [email protected],回覆的資料 應用加白名單簡化流程v0.1

android wear那些--打包穿戴式應用

當釋出給使用者時,你必須在手持應用中打包可穿戴應用程式,因為使用者不能在穿戴式裝置中直接搜尋安裝應用.如果打包正確,當用戶在手持裝置中下載應用之後系統會自動的傳送穿戴式應用到配對的裝置中. 注意:在開發的時候如果用debug key打包的應用沒有這個

Android開發之setContentView的那些

原文: setContentView方法位於Window類,實現Window的子類PhoneWindow。 每一個Activity都有一個PhoneWindow 以下為setContentView在PhoneWindow上的實現: public

關於Android NDK開發--編寫C語言那些

最近公司要求寫介面加密方法,還要求用寫成.so檔案; c語言還是大學時的垃圾底子,Android NDK開發也是根本沒有研究過,但是也只能一點一點摸索,藉此記錄一下,便於以後用到查詢方便,也讓跟我同樣的小白可以簡單借鑑一下,不至於這麼茫然。 下面就開始簡單的NDK開發:

SSM + Android 網路互動的那些

    ssm做為後臺與android互動,相信只要是瞭解過的人都知道一些基本的資料互動,向json,物件,map的互動就像喝水一樣簡單,這些基本的互動也是學習ssm後臺開發的基本,但是好多人卻是會忽

android wear那些--通過藍芽除錯

你可以通過藍芽除錯手錶應用,除錯資訊會輸出到連線配對的手機上. 設定進行除錯 在手機上開啟USB除錯 1.開啟設定>關於手機,連續點選版本號7次開啟開發者選項. 2.設定>開發者選項,開啟USB除錯. 在手錶上開啟藍芽除錯 1

Android那些》——ScrollView巢狀ListView只顯示一行的問題的解決方法

在實際開發過程中,經常會碰到ScrollView中巢狀ListView的情景 可是如果直接使用ScrollView巢狀ListView的話,我們會發現,ListView只能顯示一行 對於這個問題網上有很多解決方案, 1.手動設定ListView的高度,但ListView中的資料