android8(api級別26)引入了有關許可權和wlan掃瞄允許頻率限制。
為了提高網路安全和效能穩定性,android9(api級別28)收緊了許可權要求,並進一步限制wlan掃瞄頻率。
許可權:android 8.0 和 android 8.1
成功呼叫wifimanager.getscanresults()需要以下任意一項許可權:
• access_fine_location
• access_coarse_location
• change_wifi_state
如果呼叫應用沒有其中任意一項許可權,則呼叫失敗,並顯示secu
rityexception;
android 9:
成功呼叫wifimanager.startscan()需要滿足以下所有條件:
• 應用擁有access_fine_location或access_corase_location許可權
• 應用擁有change_wifi_state許可權
• 應用已啟用位置服務(settings->location)
android 10(api級別29)或更高版本
成功呼叫wifimangaer.startscan()需要滿足以下所有條件:
• 如果應用適配android10(api級別29)sdk或更高版本,則應用需要擁有access_fine_location許可權;
• 如果應用適配低於android10(api級別29)的sdk,則應用需要擁有access_coarse_location或access_fine_location
• 應用擁有change_wifi_state許可權
• 裝置已啟用裝置位置服務(settings->location)
若要成功呼叫wifimanager.getscanresults(),需確保滿足以下條件:
• 應用擁有access_fine_location或access_coarse_location
• 應用擁有access_wifi_state許可權
• 裝置已啟用位置服務(settings->location)
如果呼叫應用無法滿足上述所有要求,則呼叫將失敗,並顯示securityexception
類似的限制也適用於getconnectinfo函式,該函式返回wifiinfo物件,通過該物件檢索ssid和bssid需要具備以下條件:
android 8.0/android 8.1與wifimanager.getscanresults()所需許可權一致;
android9.0需要滿足以下條件
• access_fine_location或access_coarse_location
• access_wifi_state
• 裝置上啟用位置服務(settings->location)
android10需要滿足以下條件:
• access_fine_location
在android眾多系統中,有些定製性系統,雖然是8.1系統,但是對於wi-fi資訊的限制不只是對access_fine_location的限制,還需要新增gps定位服務,所以可以簡單粗暴在sdk>26時,讓使用者允許access_fine_location許可權且開啟位置服務;
判斷gps是否開啟:
private
boolean
isgpsenabel()
開啟位置服務:
private
void
opengpsactivity()
Android 8 0的WIFI 架構差異分析
android o的scan跟之前android版本存在的差異 commit 7e552863cea67e57b375f3db15e0baf70e22c39e author tony mantler google.com date fri jan811 12 492016 0800 start us...
android8 0適配工作
整個8.0適配,設計的部分包括6部分 我專案中的,其他的適配感覺並不會影響專案的執行 1 執行時許可權 2 通知notifaction適配 3 未知 apk安裝適配 4 後台執行限制 後台服務 5 懸浮框適配 6 集合的處理 abstractcollection使用限制 android6.0的執行時...
Android 8 0 上面關於wifi 的一些坑
背景 現在安卓系統已經更新到8.0了。曾經開啟手機wifi以及搜尋wifi的方法可能對8.0的安卓系統不管用了。這裡就提一些在開發中遇到的坑。一.開啟wifi 以及 關閉wifi 首先需要開啟修改系統設定的許可權 然後如果是sdk26以上的版本,就用下面的 開啟或關閉wifi。在網上也能搜到一些別人...