谷歌的Android Q到底有哪些新特性及變更?

Android Q 隱私更改相關介紹

存儲范圍變更

Android Q 改變了應用程序訪問設備外部存儲上文件的方式。 通過使用更細粒度的媒體特定權限替換以前的 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE權限。

外存中私有目錄權限變更

Android Q 為每個應用程序提供了一個獨立的在外部存儲設備的存儲沙箱,沒有其他應用可以直接訪問您應用的沙盒文件。由于文件是私有的,因此訪問這些文件不再需要任何權限。
并且 Android Q 推薦了獲取外部存儲私有文件的最佳位置:即Context.getExternalFilesDir()返回的位置,因為此位置在所有Android版本中表現一致。使用此方法時,請傳入與要創建或打開的文件類型對應的媒體環境。例如,要訪問或保存app-private圖像,請調用Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)。

公共媒體集合特性
  1. 定義公共媒體集合:Photos & Videos、Music、 Downloads。

  2. APP 無需請求任何權限即可在這些共享集合中創建和修改自己的文件。

  3. 如果你的APP想創建和修改其他應用已創建的文件,則必須首先請求相應的權限:

訪問Photos & Videos目錄的其他應用程序文件 需要請求 READ_MEDIA_IMAGES 或 READ_MEDIA_VIDEO 權限,具體取決于您的應用程序需要訪問的文件類型。

訪問 Music 共享集合中的其他應用程序文件需要 READ_MEDIA_AUDIO 權限。

沒有訪問Downloads共享集合的權限,您的應用可以訪問此集合中自己的文件。但是,要訪問此集合中的其他應用程序文件,您必須允許用戶使用系統的文件選擇器應用程序選擇文件。

訪問共享集合

訪問共享集合通過 MediaStore API ,如 MediaStore.Images、MediaStore.Video、MediaStore.Audio、MediaStore.Downloads。

需要注意的是:對于 Android Q 上新安裝的應用,對 getExternalStoragePublicDirectory()的調用僅提供對應用已存儲在其隔離存儲沙箱中的文件的訪問權限。要保持對其他應用程序文件的訪問權限,請更新應用程序的邏輯以使用MediaStore。

新增 ACCESS_MEDIA_LOCATION 權限

一些照片在其數據中會包含位置信息,允許用戶查看拍攝照片的位置。由于此位置信息是敏感的,因此我們想獲取位置信息需要以下幾步:

  1. 將新的 ACCESS_MEDIA_LOCATION 權限添加到AndroidManifest。

  2. 獲取位置信息

photoUri = MediaStore.setRequireOriginal(photoUri);
InputStream stream = getContentResolver().openInputStream(photoUri);
//從流中讀取位置信息

存儲新特性兼容

target API 級別等于 Android Q 的應用,或者在運行Android Q 的設備上新安裝的應用默認都會采取新的權限策略
如果你的APP同時滿足以下兩個條件,則會兼容以前的權限策略:

  1. targetSdkVersion <= Android 9
  2. 你的應用安裝在從 Android 9 升級到 Android Q 的設備上
識別特定的外部存儲設備

Android Q 為每個外部存儲設備提供唯一的卷名。

 //獲取卷名方式
Set<String> volumeNames = MediaStore.getAllVolumeNames(context);

Activity后臺活動限制

Android Q 對應用未經通知用戶就啟動進行了極大地限制,在Android Q上運行的應用只有在滿足以下一個或多個條件時才能啟動活動:

  1. 該APP具有可見窗口,例如有前臺Activity
  2. 位于前臺的另一個 APP 發送屬于該應用程序的 PendingIntent。
  3. 系統發送屬于該 APP 的PendingIntent,例如點擊通知。
  4. 系統向應用程序發送廣播,例如SECRET_CODE_ACTION。只有應用程序預期啟動UI的特定廣播才免除。
活動限制的兼容性

此行為更改適用于在 Android Q 上運行的所有應用,甚至是針對Android 9(API級別28)或更低級別的應用。但是,只要您的應用以用戶互動的直接結果開始活動,您的應用很可能不會受到此更改的影響。實際上,大多數應用程序都不受此更改的影響。

此外,Android Q 建議我們 后臺應用程序都應創建通知,以便向用戶提供信息,而不是直接啟動活動。

一些特殊情況如:來電或者警報,需要立刻啟動 Activity,則可以通過創建高優先級的通知,并提供 fullscreen itent。如何創建高優先級通知?

設備位置權限的訪問控制

用戶可以更好地控制應用何時可以訪問設備位置。當在Android Q上運行的應用程序請求位置訪問時,會通過對話框的形式給用戶進行授權提示。此對話框允許用戶授予對兩個不同范圍的位置訪問權限:在使用中(僅限前臺)或始終(前臺和后臺)。

新增權限 ACCESS_BACKGROUND_LOCATION

如果你的應用針對 Android Q 并且需要在后臺運行時訪問用戶的位置,則必須在應用的清單文件中聲明新權限

<manifest>
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

位置限制的兼容性

如果您的應用在 Android Q 上運行但針對的是 Android 9(API級別28)或更低版本,則會出現以下行為:

  1. 如果你的應用為 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 聲明 標記,則系統會在安裝期間自動為ACCESS_BACKGROUND_LOCATION 添加 標記。
  2. 如果你的應用請求 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION,系統會自動將 ACCESS_BACKGROUND_LOCATION添加到請求中。
  3. 雖然你的應用可以請求并接收 ACCESS_BACKGROUND_LOCATION,但用戶可以通過選擇您的應用僅應在前臺訪問位置信息來撤消此權限。

對數據和標識符的更改

影響在Android Q 上運行的所有應用的更改:

聯系人親緣關系

從Android Q開始,該平臺不再跟蹤聯系人親緣關系信息。因此,如果您的應用對用戶的聯系人進行搜索,則結果不再按交互頻率排序。 “聯系人提供程序”指南包含一個通知,說明自Android Q起所有設備上已廢棄的特定字段和方法。

MAC地址隨機化

在Android Q 運行的設備默認傳輸隨機的MAC 地址,獲取隨機MAC地址API:WifiConfiguration.getRandomizedMacAddress()
獲取實際硬件MAC地址:WifiInfo.getFactoryMacAddress()。

唯一標識符

應用必須具有 READ_PRIVILEGED_PHONE_STATE 特權權限才能訪問設備的不可重置標識符,包括IMEI和序列號。原則上 Android Q 建議避免使用更容易關聯到個人的硬件標識符,而是使用實例ID。實例ID的做法推薦

訪問剪貼板數據

除非您的應用程序是默認輸入法編輯器或當前具有焦點的應用程序,否則您的應用程序無法訪問剪貼板數據。

影響針對 Android Q API 級別運行的應用的更改:

訪問USB串行需要用戶許可

如果您的應用針對Android Q,則您的應用只能在用戶授予您訪問USB設備或配件的應用權限后才能讀取序列號。

相機和連接相關更改

影響在Android Q 上運行的所有應用的更改:

訪問相機信息需要獲得許可

Android Q更改了默認情況下getCameraCharacteristics()方法返回的信息的廣度。特別是,您的應用必須具有CAMERA權限才能訪問此方法的返回值中包含的潛在設備特定元數據。

啟用和禁用Wi-Fi的限制

在Android Q上運行的應用無法啟用或停用Wi-Fi。 WifiManager.setWifiEnabled()方法始終返回false。 如果需要,請使用設置面板提示用戶啟用和禁用Wi-Fi。

影響針對 Android Q API 級別運行的應用的更改:

電話,Wi-Fi,藍牙API所需的精確位置許可

除非您的應用具有ACCESS_FINE_LOCATION權限,否則在Android Q上運行時,您的應用無法在Wi-Fi,Wi-Fi Aware或藍牙API中使用多種方法。要查看受影響方法的列表,請參閱隱私附錄。

Wi-Fi網絡配置限制

將Wi-Fi網絡列表的手動配置限制在系統應用程序中。如果您的應用針對Android Q,則以下方法不再返回有用數據,下面方法將不會返回有效信息:

  • getConfiguredNetworks()方法始終返回空List
  • addNetwork()和updateNetwork() - 始終返回-1
  • 返回布爾值的每個網絡操作 - removeNetwork(),reassociate(),enableNetwork(),disableNetwork(),reconnect()和disconnect() - 始終返回false

物理活動識別

針對 Android Q API 級別運行的應用,Android Q為需要檢測用戶移動的應用程序(例如步行,騎自行車或車輛)引入了新的ACTIVITY_RECOGNITION運行時權限。這旨在讓用戶了解設置中如何使用設備傳感器數據。

Android Q 行為變更

最令我們關心的,還是我們的適配工作。下面,分兩部分講:

一、針對所有運行在 Android Q 上的app的行為變更

非SDK接口限制更新(Non-SDK interface restrictions):

為了確保應用穩定性和兼容性,Google 在 Android O 中開始限制使用哪些非SDK接口(API級別28)。 Android Q 更新了非SDK接口的限制列表,并且修改了限制規則。

1.灰名單修改:在Android 9(API級別28)中,灰名單分為以下兩個列表:

(1)lightgrey列表: targetSdkVersion<28 情況下可以使用的非SDK接口

(2)darkgrey list:targetSdkVersion>=28 情況下無法使用的非SDK接口

在 Android Q 中,我們現在將這兩個列表統稱為 greylist(灰名單),但是受目標API級別限制:
如在 Android P 中被限制的黑灰色名單:darkgrey list 現在叫做 greylist-max-o, 在 Android Q 中被限制的非SDK接口應該稱為 greylist-max-p

2.代碼注釋修改:引入以下注解來區別哪些非SDK接口在哪個API做了限制 @UnsupportedAppUsge 無限制的灰名單
@UnsupportedAppUsage(maxTargetSdk = 0) 黑名單,哪個API都不能調用
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.O) API <= Android O 可以調用
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) API <= Android P 可以調用
Android Q 非SDK接口限制列表過長,這里直接附上查詢地址

WIFI P2P 廣播(Wi-Fi Direct broadcasts):

在 Android Q 上,與 Wi-Fi Direct 功能相關的廣播不再具有粘性。如果你的 APP 依賴于在注冊時接收這些廣播,可以在初始化時使用適當的get()方法來獲取信息,具體可參考 WifiP2pManager 類相關方法。

SYSTEM_ALERT_WINDOW 權限在 Android Go 設備變更

在Android Q(Go版)設備上運行的應用無法接收SYSTEM_ALERT_WINDOW權限。這是因為繪制疊加窗口使用過多的內存,這對低內存Android設備的性能特別有害。

二、針對API級別為 Android Q 的行為變更

如果你的應用將targetSdkVersion設置為“android-Q”或更高版本,則下面的你需要注意了。

灰名單變更

灰名單變更參考“針對所有運行在 Android Q 上的app的行為變更”的策略,意味著@UnsupportedAppUsage(maxTargetSdk < Build.VERSION_CODES.Q) 的非API方法你都需要注意了!!!

共享內存

針對Q的應用不能再直接使用ashmem(/ dev / ashmem),而必須通過NDK的ASharedMemory類訪問共享內存。此外,應用程序無法直接對現有的ashmem文件描述符進行IOCTL,而必須使用NDK的ASharedMemory類或Android Java API來創建共享內存區域。在使用共享內存時,此更改可提高安全性和穩健性,從而提高Android整體的性能和安全性。

Android runtime only accepts system-generated OAT files

Android運行時(ART)不再從應用程序進程調用dex2oat。此更改意味著ART將僅接受系統生成的OAT文件。

Permissions changes for fullscreen intents

使用全屏Intent通知的應用必須在其應用的 Manifest 文件中請求 USE_FULL_SCREEN_INTENT 權限,這是正常權限,因此系統會自動授予。 如果針對Android Q或更高版本的應用嘗試在不請求USE_FULL_SCREEN_INTENT權限的情況下創建具有全屏的Intent,系統將忽略全屏意圖。

閱讀更多

程序員接私活經驗總結

(Android)面試題級答案(精選版)

還在期待安卓9.0嗎?Android 10.0要來了

阿里內部的那個牛逼帶閃電的Java診斷工具終于開源了

錘子科技"臨死前"被"接盤",內部人士爆料已改簽今日頭條母公司

如果對技術比較感興趣,歡迎關注公眾號:終端研發部,id:codeGoogler ,一起交流和學習~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容

  • Android Q 隱私更改相關介紹 存儲范圍變更 Android Q 改變了應用程序訪問設備外部存儲上文件的方式...
    420_c35a閱讀 1,075評論 0 3
  • Android Q 的那些新特征與特性 2019年,移動創新比以往任何時候都更加強大,從5G到邊緣到邊緣顯示器甚至...
    zhx喜籽閱讀 264評論 0 0
  • 谷歌針對的Q預覽版的特性分享,內容涉及比較多。遺憾的是沒有提供PPT給參會者,如下內容根據提綱與回憶整理,如有缺失...
    十八磚閱讀 9,290評論 1 13
  • 目標:2018.7.1前除工作外收入突破10W 種子實踐: 今天早班,下班之前給先生打電話,得知他在家里做清潔,...
    jessie娟子閱讀 192評論 0 0
  • 實踐出真知 主動的人生有更高的價值,行動是眾妙之門 人生一場,定有勝境 人生在世,不搞不行,亂搞不行,看準了再搞,...
    黃向書閱讀 111評論 0 0