前言
AndroidQ對(duì)設(shè)備的系統(tǒng)標(biāo)識(shí)增加了更多的限制和修改,那么讓我們來(lái)看一下,在AndroidQ的上的改動(dòng)和適配方法成畦。
MAC地址
默認(rèn)情況下,搭載 Android Q 的設(shè)備會(huì)傳輸隨機(jī)選擇的 MAC 地址既峡。如果您的應(yīng)用處理企業(yè)用例预茄,平臺(tái)會(huì)提供幾個(gè)新的 API:
-
獲取隨機(jī)選擇的 MAC 地址:設(shè)備所有者應(yīng)用和個(gè)人資料所有者應(yīng)用可以通過(guò)調(diào)用
WifiConfiguration.getRandomizedMacAddress()
檢索分配給特定網(wǎng)絡(luò)的隨機(jī)選擇 MAC 地址隔显。這個(gè)方法返回的mac地址永遠(yuǎn)為02:00:00:00:00:00崎溃,所以這個(gè)接口沒有什么實(shí)際意義蜻直。 -
獲取實(shí)際的出廠 MAC 地址:設(shè)備所有者應(yīng)用可以通過(guò)調(diào)用
WifiInfo.getFactoryMacAddress()
檢索設(shè)備的實(shí)際硬件 MAC 地址。此方法對(duì)于跟蹤設(shè)備隊(duì)列非常有用袁串。這方法目前在AndroidQ beta2中并未實(shí)裝到SDK概而,無(wú)法調(diào)用。原因不明囱修,但是官方文檔里確實(shí)說(shuō)了這個(gè)方法赎瑰。
不可重置的設(shè)備標(biāo)識(shí)符
AndroidQ將徹底禁止第三方應(yīng)用獲取設(shè)備的imei序列號(hào),無(wú)論你是以target多少版本編譯的應(yīng)用破镰,都不能在AndroidQ的設(shè)備上獲得設(shè)備標(biāo)識(shí)符乡范。所以如果你只是想得到唯一標(biāo)識(shí)符舰褪,請(qǐng)不要再加入READ_PHONE_STATE權(quán)限杨耙,不會(huì)生效序攘。
如果你的應(yīng)用可以加入系統(tǒng)級(jí)應(yīng)用,那么你需要加入權(quán)限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission. READ_PRIVILEGED_PHONE_STATE"/>
READ_PRIVILEGED_PHONE_STATE為系統(tǒng)級(jí)別權(quán)限宇整,第三方應(yīng)用加入無(wú)效。
如果依然使用獲取imel相關(guān)的代碼時(shí)
- 如果應(yīng)用以 Android Q 為目標(biāo)平臺(tái)芋膘,則會(huì)發(fā)生
SecurityException
鳞青。 - 如果應(yīng)用以 Android 9(API 級(jí)別 28)或更低版本為目標(biāo)平臺(tái),則相應(yīng)方法會(huì)返回
null
或占位符數(shù)據(jù)(如果應(yīng)用具有READ_PHONE_STATE
權(quán)限)为朋。否則臂拓,會(huì)發(fā)生SecurityException
。
那我們應(yīng)該如何來(lái)正確獲取一個(gè)唯一識(shí)別碼呢习寸?
其實(shí)Google很久以前就專門寫文檔說(shuō)明過(guò)這個(gè)問(wèn)題唯一識(shí)別符的最佳做法
這里如果后臺(tái)只是想要一個(gè)唯一識(shí)別符胶惰,那么我們最適合的選擇應(yīng)該是UUID,UUID每次請(qǐng)求都會(huì)重新生成霞溪,所以我們申請(qǐng)一個(gè)UUID后孵滞,用sp把他存儲(chǔ)起來(lái)中捆。這樣只要我們的App沒有被刪除,這個(gè)UUID將永遠(yuǎn)唯一的存在坊饶。我知道這里有的同學(xué)會(huì)把UUID直接存到sd卡里泄伪,這樣就算卸載了App依然可以保證UUID是存在的,不過(guò)我們都知道AndroidQ對(duì)IO進(jìn)行了修改匿级,你這么做不合適了已經(jīng)蟋滴。
UUID.randomUUID().toString()
得到一個(gè)唯一的識(shí)別符,保存起來(lái)就可以了痘绎。
訪問(wèn)剪貼板數(shù)據(jù)
除非您的應(yīng)用是默認(rèn)輸入法 (IME) 或是目前處于焦點(diǎn)的應(yīng)用津函,否則應(yīng)用無(wú)法訪問(wèn)剪貼板數(shù)據(jù)。
這句話的意思其實(shí)就是简逮,你的App不再可以在不可見也就是后臺(tái)狀態(tài)下訪問(wèn)剪貼板球散,具體沒有適配方法,請(qǐng)遵守Google的開發(fā)要求散庶。
以下變更僅會(huì)影響以 Android Q 為目標(biāo)平臺(tái)的應(yīng)用蕉堰。
訪問(wèn) USB 串行設(shè)備需要用戶授予權(quán)限
如果您的應(yīng)用以 Android Q 為目標(biāo)平臺(tái),則該應(yīng)用只能在用戶授予其訪問(wèn) USB 設(shè)備或配件的權(quán)限后才能讀取序列號(hào)悲龟。
后記
唯一識(shí)別符的改動(dòng)和適配還是比較容易理解的屋讶,我現(xiàn)在唯一想知道的是那些第三方的推送平臺(tái),沒有了讀取設(shè)備id的權(quán)限以后要怎么正確的完成推送動(dòng)作须教。不過(guò)這也不是我該想的事皿渗。
- Github: https://github.com/liyuhaolol
- 博客: http://blog.csdn.net/ccffvii
- 簡(jiǎn)書: http://www.reibang.com/u/a305fae6394f
- 郵箱: liyuhaoid@sina.com
如果看不懂或者我寫的有問(wèn)題的地方,歡迎在評(píng)論中指出轻腺,大家一切探究討論乐疆!