摘要:隱私更改相關(guān)介紹存儲(chǔ)范圍變更改變了應(yīng)用程序訪問(wèn)設(shè)備外部存儲(chǔ)上文件的方式。只有應(yīng)用程序預(yù)期啟動(dòng)的特定廣播才免除。此更改意味著將僅接受系統(tǒng)生成的文件。使用全屏通知的應(yīng)用必須在其應(yīng)用的文件中請(qǐng)求權(quán)限,這是正常權(quán)限,因此系統(tǒng)會(huì)自動(dòng)授予。
Android Q 隱私更改相關(guān)介紹 存儲(chǔ)范圍變更
Android Q 改變了應(yīng)用程序訪問(wèn)設(shè)備外部存儲(chǔ)上文件的方式。 通過(guò)使用更細(xì)粒度的媒體特定權(quán)限替換以前的 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE權(quán)限。
Android Q 為每個(gè)應(yīng)用程序提供了一個(gè)獨(dú)立的在外部存儲(chǔ)設(shè)備的存儲(chǔ)沙箱,沒(méi)有其他應(yīng)用可以直接訪問(wèn)您應(yīng)用的沙盒文件。由于文件是私有的,因此訪問(wèn)這些文件不再需要任何權(quán)限。
并且 Android Q 推薦了獲取外部存儲(chǔ)私有文件的最佳位置:即Context.getExternalFilesDir()返回的位置,因?yàn)榇宋恢迷谒蠥ndroid版本中表現(xiàn)一致。使用此方法時(shí),請(qǐng)傳入與要?jiǎng)?chuàng)建或打開(kāi)的文件類型對(duì)應(yīng)的媒體環(huán)境。例如,要訪問(wèn)或保存app-private圖像,請(qǐng)調(diào)用Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)。
定義公共媒體集合:Photos & Videos、Music、 Downloads。
APP 無(wú)需請(qǐng)求任何權(quán)限即可在這些共享集合中創(chuàng)建和修改自己的文件。
如果你的APP想創(chuàng)建和修改其他應(yīng)用已創(chuàng)建的文件,則必須首先請(qǐng)求相應(yīng)的權(quán)限:
訪問(wèn)Photos & Videos目錄的其他應(yīng)用程序文件 需要請(qǐng)求 READ_MEDIA_IMAGES 或 READ_MEDIA_VIDEO 權(quán)限,具體取決于您的應(yīng)用程序需要訪問(wèn)的文件類型。
訪問(wèn) Music 共享集合中的其他應(yīng)用程序文件需要 READ_MEDIA_AUDIO 權(quán)限。
沒(méi)有訪問(wèn)Downloads共享集合的權(quán)限,您的應(yīng)用可以訪問(wèn)此集合中自己的文件。但是,要訪問(wèn)此集合中的其他應(yīng)用程序文件,您必須允許用戶使用系統(tǒng)的文件選擇器應(yīng)用程序選擇文件。
訪問(wèn)共享集合通過(guò) MediaStore API ,如 MediaStore.Images、MediaStore.Video、MediaStore.Audio、MediaStore.Downloads。
需要注意的是:對(duì)于 Android Q 上新安裝的應(yīng)用,對(duì) getExternalStoragePublicDirectory()的調(diào)用僅提供對(duì)應(yīng)用已存儲(chǔ)在其隔離存儲(chǔ)沙箱中的文件的訪問(wèn)權(quán)限。要保持對(duì)其他應(yīng)用程序文件的訪問(wèn)權(quán)限,請(qǐng)更新應(yīng)用程序的邏輯以使用MediaStore。
一些照片在其數(shù)據(jù)中會(huì)包含位置信息,允許用戶查看拍攝照片的位置。由于此位置信息是敏感的,因此我們想獲取位置信息需要以下幾步:
將新的 ACCESS_MEDIA_LOCATION 權(quán)限添加到AndroidManifest。
獲取位置信息
photoUri = MediaStore.setRequireOriginal(photoUri); InputStream stream = getContentResolver().openInputStream(photoUri); //從流中讀取位置信息
target API 級(jí)別等于 Android Q 的應(yīng)用,或者在運(yùn)行Android Q 的設(shè)備上新安裝的應(yīng)用默認(rèn)都會(huì)采取新的權(quán)限策略
如果你的APP同時(shí)滿足以下兩個(gè)條件,則會(huì)兼容以前的權(quán)限策略:
targetSdkVersion <= Android 9
你的應(yīng)用安裝在從 Android 9 升級(jí)到 Android Q 的設(shè)備上
Android Q 為每個(gè)外部存儲(chǔ)設(shè)備提供唯一的卷名。
//獲取卷名方式 SetActivity后臺(tái)活動(dòng)限制volumeNames = MediaStore.getAllVolumeNames(context);
Android Q 對(duì)應(yīng)用未經(jīng)通知用戶就啟動(dòng)進(jìn)行了極大地限制,在Android Q上運(yùn)行的應(yīng)用只有在滿足以下一個(gè)或多個(gè)條件時(shí)才能啟動(dòng)活動(dòng):
該APP具有可見(jiàn)窗口,例如有前臺(tái)Activity
位于前臺(tái)的另一個(gè) APP 發(fā)送屬于該應(yīng)用程序的 PendingIntent。
系統(tǒng)發(fā)送屬于該 APP 的PendingIntent,例如點(diǎn)擊通知。
系統(tǒng)向應(yīng)用程序發(fā)送廣播,例如SECRET_CODE_ACTION。只有應(yīng)用程序預(yù)期啟動(dòng)UI的特定廣播才免除。
此行為更改適用于在 Android Q 上運(yùn)行的所有應(yīng)用,甚至是針對(duì)Android 9(API級(jí)別28)或更低級(jí)別的應(yīng)用。但是,只要您的應(yīng)用以用戶互動(dòng)的直接結(jié)果開(kāi)始活動(dòng),您的應(yīng)用很可能不會(huì)受到此更改的影響。實(shí)際上,大多數(shù)應(yīng)用程序都不受此更改的影響。
此外,Android Q 建議我們 后臺(tái)應(yīng)用程序都應(yīng)創(chuàng)建通知,以便向用戶提供信息,而不是直接啟動(dòng)活動(dòng)。
一些特殊情況如:來(lái)電或者警報(bào),需要立刻啟動(dòng) Activity,則可以通過(guò)創(chuàng)建高優(yōu)先級(jí)的通知,并提供 fullscreen itent。如何創(chuàng)建高優(yōu)先級(jí)通知?
設(shè)備位置權(quán)限的訪問(wèn)控制用戶可以更好地控制應(yīng)用何時(shí)可以訪問(wèn)設(shè)備位置。當(dāng)在Android Q上運(yùn)行的應(yīng)用程序請(qǐng)求位置訪問(wèn)時(shí),會(huì)通過(guò)對(duì)話框的形式給用戶進(jìn)行授權(quán)提示。此對(duì)話框允許用戶授予對(duì)兩個(gè)不同范圍的位置訪問(wèn)權(quán)限:在使用中(僅限前臺(tái))或始終(前臺(tái)和后臺(tái))。
如果你的應(yīng)用針對(duì) Android Q 并且需要在后臺(tái)運(yùn)行時(shí)訪問(wèn)用戶的位置,則必須在應(yīng)用的清單文件中聲明新權(quán)限
如果您的應(yīng)用在 Android Q 上運(yùn)行但針對(duì)的是 Android 9(API級(jí)別28)或更低版本,則會(huì)出現(xiàn)以下行為:
如果你的應(yīng)用為 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 聲明 標(biāo)記,則系統(tǒng)會(huì)在安裝期間自動(dòng)為ACCESS_BACKGROUND_LOCATION 添加 標(biāo)記。
如果你的應(yīng)用請(qǐng)求 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION,系統(tǒng)會(huì)自動(dòng)將 ACCESS_BACKGROUND_LOCATION添加到請(qǐng)求中。
雖然你的應(yīng)用可以請(qǐng)求并接收 ACCESS_BACKGROUND_LOCATION,但用戶可以通過(guò)選擇您的應(yīng)用僅應(yīng)在前臺(tái)訪問(wèn)位置信息來(lái)撤消此權(quán)限。
對(duì)數(shù)據(jù)和標(biāo)識(shí)符的更改影響在Android Q 上運(yùn)行的所有應(yīng)用的更改:
從Android Q開(kāi)始,該平臺(tái)不再跟蹤聯(lián)系人親緣關(guān)系信息。因此,如果您的應(yīng)用對(duì)用戶的聯(lián)系人進(jìn)行搜索,則結(jié)果不再按交互頻率排序。 “聯(lián)系人提供程序”指南包含一個(gè)通知,說(shuō)明自Android Q起所有設(shè)備上已廢棄的特定字段和方法。
在Android Q 運(yùn)行的設(shè)備默認(rèn)傳輸隨機(jī)的MAC 地址,獲取隨機(jī)MAC地址API:WifiConfiguration.getRandomizedMacAddress()
獲取實(shí)際硬件MAC地址:WifiInfo.getFactoryMacAddress()。
應(yīng)用必須具有 READ_PRIVILEGED_PHONE_STATE 特權(quán)權(quán)限才能訪問(wèn)設(shè)備的不可重置標(biāo)識(shí)符,包括IMEI和序列號(hào)。原則上 Android Q 建議避免使用更容易關(guān)聯(lián)到個(gè)人的硬件標(biāo)識(shí)符,而是使用實(shí)例ID。實(shí)例ID的做法推薦
除非您的應(yīng)用程序是默認(rèn)輸入法編輯器或當(dāng)前具有焦點(diǎn)的應(yīng)用程序,否則您的應(yīng)用程序無(wú)法訪問(wèn)剪貼板數(shù)據(jù)。
影響針對(duì) Android Q API 級(jí)別運(yùn)行的應(yīng)用的更改:
如果您的應(yīng)用針對(duì)Android Q,則您的應(yīng)用只能在用戶授予您訪問(wèn)USB設(shè)備或配件的應(yīng)用權(quán)限后才能讀取序列號(hào)。
相機(jī)和連接相關(guān)更改影響在Android Q 上運(yùn)行的所有應(yīng)用的更改:
Android Q更改了默認(rèn)情況下getCameraCharacteristics()方法返回的信息的廣度。特別是,您的應(yīng)用必須具有CAMERA權(quán)限才能訪問(wèn)此方法的返回值中包含的潛在設(shè)備特定元數(shù)據(jù)。
在Android Q上運(yùn)行的應(yīng)用無(wú)法啟用或停用Wi-Fi。 WifiManager.setWifiEnabled()方法始終返回false。 如果需要,請(qǐng)使用設(shè)置面板提示用戶啟用和禁用Wi-Fi。
影響針對(duì) Android Q API 級(jí)別運(yùn)行的應(yīng)用的更改:
除非您的應(yīng)用具有ACCESS_FINE_LOCATION權(quán)限,否則在Android Q上運(yùn)行時(shí),您的應(yīng)用無(wú)法在Wi-Fi,Wi-Fi Aware或藍(lán)牙API中使用多種方法。要查看受影響方法的列表,請(qǐng)參閱隱私附錄。
將Wi-Fi網(wǎng)絡(luò)列表的手動(dòng)配置限制在系統(tǒng)應(yīng)用程序中。如果您的應(yīng)用針對(duì)Android Q,則以下方法不再返回有用數(shù)據(jù),下面方法將不會(huì)返回有效信息:
getConfiguredNetworks()方法始終返回空List
addNetwork()和updateNetwork() - 始終返回-1
返回布爾值的每個(gè)網(wǎng)絡(luò)操作 - removeNetwork(),reassociate(),enableNetwork(),disableNetwork(),reconnect()和disconnect() - 始終返回false
物理活動(dòng)識(shí)別針對(duì) Android Q API 級(jí)別運(yùn)行的應(yīng)用,Android Q為需要檢測(cè)用戶移動(dòng)的應(yīng)用程序(例如步行,騎自行車或車輛)引入了新的ACTIVITY_RECOGNITION運(yùn)行時(shí)權(quán)限。這旨在讓用戶了解設(shè)置中如何使用設(shè)備傳感器數(shù)據(jù)。
Android Q 行為變更最令我們關(guān)心的,還是我們的適配工作。下面,分兩部分講:
一、針對(duì)所有運(yùn)行在 Android Q 上的app的行為變更為了確保應(yīng)用穩(wěn)定性和兼容性,Google 在 Android O 中開(kāi)始限制使用哪些非SDK接口(API級(jí)別28)。 Android Q 更新了非SDK接口的限制列表,并且修改了限制規(guī)則。
1.灰名單修改:在Android 9(API級(jí)別28)中,灰名單分為以下兩個(gè)列表:
(1)lightgrey列表: targetSdkVersion<28 情況下可以使用的非SDK接口
(2)darkgrey list:targetSdkVersion>=28 情況下無(wú)法使用的非SDK接口
在 Android Q 中,我們現(xiàn)在將這兩個(gè)列表統(tǒng)稱為 greylist(灰名單),但是受目標(biāo)API級(jí)別限制:
如在 Android P 中被限制的黑灰色名單:darkgrey list 現(xiàn)在叫做 greylist-max-o, 在 Android Q 中被限制的非SDK接口應(yīng)該稱為 greylist-max-p
2.代碼注釋修改:引入以下注解來(lái)區(qū)別哪些非SDK接口在哪個(gè)API做了限制 @UnsupportedAppUsge 無(wú)限制的灰名單
@UnsupportedAppUsage(maxTargetSdk = 0) 黑名單,哪個(gè)API都不能調(diào)用
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.O) API <= Android O 可以調(diào)用
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) API <= Android P 可以調(diào)用
Android Q 非SDK接口限制列表過(guò)長(zhǎng),這里直接附上查詢地址
在 Android Q 上,與 Wi-Fi Direct 功能相關(guān)的廣播不再具有粘性。如果你的 APP 依賴于在注冊(cè)時(shí)接收這些廣播,可以在初始化時(shí)使用適當(dāng)?shù)膅et()方法來(lái)獲取信息,具體可參考 WifiP2pManager 類相關(guān)方法。
在Android Q(Go版)設(shè)備上運(yùn)行的應(yīng)用無(wú)法接收SYSTEM_ALERT_WINDOW權(quán)限。這是因?yàn)槔L制疊加窗口使用過(guò)多的內(nèi)存,這對(duì)低內(nèi)存Android設(shè)備的性能特別有害。
二、針對(duì)API級(jí)別為 Android Q 的行為變更如果你的應(yīng)用將targetSdkVersion設(shè)置為“android-Q”或更高版本,則下面的你需要注意了。
灰名單變更參考“針對(duì)所有運(yùn)行在 Android Q 上的app的行為變更”的策略,意味著@UnsupportedAppUsage(maxTargetSdk < Build.VERSION_CODES.Q) 的非API方法你都需要注意了!?。?/p>
針對(duì)Q的應(yīng)用不能再直接使用ashmem(/ dev / ashmem),而必須通過(guò)NDK的ASharedMemory類訪問(wèn)共享內(nèi)存。此外,應(yīng)用程序無(wú)法直接對(duì)現(xiàn)有的ashmem文件描述符進(jìn)行IOCTL,而必須使用NDK的ASharedMemory類或Android Java API來(lái)創(chuàng)建共享內(nèi)存區(qū)域。在使用共享內(nèi)存時(shí),此更改可提高安全性和穩(wěn)健性,從而提高Android整體的性能和安全性。
Android運(yùn)行時(shí)(ART)不再?gòu)膽?yīng)用程序進(jìn)程調(diào)用dex2oat。此更改意味著ART將僅接受系統(tǒng)生成的OAT文件。
使用全屏Intent通知的應(yīng)用必須在其應(yīng)用的 Manifest 文件中請(qǐng)求 USE_FULL_SCREEN_INTENT 權(quán)限,這是正常權(quán)限,因此系統(tǒng)會(huì)自動(dòng)授予。 如果針對(duì)Android Q或更高版本的應(yīng)用嘗試在不請(qǐng)求USE_FULL_SCREEN_INTENT權(quán)限的情況下創(chuàng)建具有全屏的Intent,系統(tǒng)將忽略全屏意圖。
閱讀更多程序員接私活經(jīng)驗(yàn)總結(jié)
(Android)面試題級(jí)答案(精選版)
還在期待安卓9.0嗎?Android 10.0要來(lái)了
阿里內(nèi)部的那個(gè)牛逼帶閃電的Java診斷工具終于開(kāi)源了
錘子科技"臨死前"被"接盤",內(nèi)部人士爆料已改簽今日頭條母公司
如果對(duì)技術(shù)比較感興趣,歡迎關(guān)注公眾號(hào):終端研發(fā)部,id:codeGoogler ,一起交流和學(xué)習(xí)~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43557.html
摘要:隱私更改相關(guān)介紹存儲(chǔ)范圍變更改變了應(yīng)用程序訪問(wèn)設(shè)備外部存儲(chǔ)上文件的方式。只有應(yīng)用程序預(yù)期啟動(dòng)的特定廣播才免除。此更改意味著將僅接受系統(tǒng)生成的文件。使用全屏通知的應(yīng)用必須在其應(yīng)用的文件中請(qǐng)求權(quán)限,這是正常權(quán)限,因此系統(tǒng)會(huì)自動(dòng)授予。 Android Q 隱私更改相關(guān)介紹 存儲(chǔ)范圍變更 Android Q 改變了應(yīng)用程序訪問(wèn)設(shè)備外部存儲(chǔ)上文件的方式。 通過(guò)使用更細(xì)粒度的媒體特定權(quán)限替換以前的...
摘要:谷歌系統(tǒng)將在第三季度正式發(fā)布,屆時(shí)將會(huì)由諸多廠商系統(tǒng)得到升級(jí)。不過(guò)谷歌確實(shí)表示,中改善了后退手勢(shì)的靈敏度偏好,并為其添加了的垂直應(yīng)用排阻極限。顯然,谷歌希望開(kāi)發(fā)人員能夠確保其已經(jīng)為新版做好準(zhǔn)備。 前言 當(dāng)今手機(jī)市場(chǎng)可謂是百花齊放,但手機(jī)系統(tǒng)卻屈指可數(shù),其中Android和iOS就占據(jù)了整個(gè)手機(jī)系統(tǒng)市場(chǎng)的99%,單單Android就占據(jù)了整個(gè)手機(jī)系統(tǒng)市場(chǎng)的86%,可謂是占據(jù)絕對(duì)優(yōu)勢(shì)。 s...
閱讀 3734·2021-09-07 10:19
閱讀 3666·2021-09-03 10:42
閱讀 3608·2021-09-03 10:28
閱讀 2579·2019-08-29 14:11
閱讀 839·2019-08-29 13:54
閱讀 1625·2019-08-29 12:14
閱讀 448·2019-08-26 12:12
閱讀 3650·2019-08-26 10:45