Android 10 的隱私權變更

Android 10 (API 級別 29) 導入多項功能,並進行行為變更,進一步保護使用者隱私。這些異動可進一步提升資訊公開程度,並擴大使用者對資料的掌控權,以及對應用程式授予的權限。這些功能可能表示應用程式所依附的特定行為或資料,與舊版平台相比,行為可能有所不同。如果您的應用程式目前遵循處理使用者資料的最佳做法,影響應該不大。

這個頁面會列出每項變更的摘要。

主要變更

本節說明 Android 10 中與隱私權相關的重要變更。

外部儲存空間存取權僅限於應用程式檔案和媒體

根據預設,指定 Android 10 以上目標版本的應用程式會取得外部儲存空間的範圍存取權,或稱為限定範圍儲存空間。這類應用程式無須要求任何儲存空間相關使用者權限,即可查看外部儲存裝置中的下列檔案類型:

如要進一步瞭解限定範圍儲存空間,以及如何共用、存取及修改儲存在外部儲存裝置上的檔案,請參閱「管理外部儲存空間中的檔案」和「存取及修改媒體檔案」指南。

如要在背景存取裝置位置資訊,必須取得權限

為支援使用者進一步控管應用程式對位置資訊的存取權,Android 10 導入了 ACCESS_BACKGROUND_LOCATION 權限。

ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION 權限不同,ACCESS_BACKGROUND_LOCATION 權限只會影響應用程式在背景執行時的位置存取權。除非符合下列任一條件,否則應用程式會被視為在背景存取位置資訊:

如果應用程式建立及監控地理圍欄,且指定 Android 10 (API 級別 29) 以上版本,就必須宣告 ACCESS_BACKGROUND_LOCATION 權限。

指定 Android 9 以下版本時,系統會自動授予存取權

如果應用程式在 Android 10 以上版本上執行,但指定 Android 9 (API 級別 28) 以下版本,平台會套用下列行為:

  • 如果應用程式為 ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION 宣告 <uses-permission> 元素,系統會在安裝期間自動為 ACCESS_BACKGROUND_LOCATION 新增 <uses-permission> 元素。
  • 如果應用程式要求 ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION,系統會自動在要求中加入 ACCESS_BACKGROUND_LOCATION

裝置升級至 Android 10 時可存取

如果使用者授予應用程式裝置位置存取權 (ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION),然後將裝置從 Android 9 升級至 Android 10,系統會自動更新授予應用程式的位置資訊權限組合。升級後應用程式獲得的權限組合,取決於目標 SDK 版本和定義的權限,如下表所示:

表 1. 裝置升級至 Android 10 後,位置存取權狀態的變更

目標平台版本 是否已授予概略或精確
位置存取權?
資訊清單中是否定義了背景權限?
已更新預設權限狀態
Android 10 前景和背景存取權
Android 10 僅限前景存取權
Android 10 (系統會忽略) 無存取權
Android 9 以下版本 系統會在裝置升級時自動新增 前景和背景存取權
Android 9 以下版本 (系統會忽略) 無存取權

請注意,即使系統自動更新應用程式的裝置位置資訊存取權,使用者仍可變更存取層級。舉例來說,使用者可能會將應用程式的存取權限降為僅限前景,或完全撤銷存取權。嘗試存取裝置位置資訊前 (特別是在前景服務中),應用程式應先檢查使用者是否仍允許應用程式接收這類資訊。

在 Android 10 裝置上更新目標 API 級別時,存取權會遭到撤銷

假設您的應用程式已安裝在執行 Android 10 的裝置上。在這種情況下,如果將應用程式更新為以 Android 10 為目標,裝置就會撤銷 ACCESS_BACKGROUND_LOCATION 權限。

如要進一步瞭解如何在應用程式於背景執行時擷取裝置位置資訊,請參閱接收定期位置更新通知指南。

從背景啟動活動的限制

自 Android 10 起,系統會限制從背景啟動活動。這項行為變更可盡量減少對使用者的干擾,並讓使用者更充分掌控畫面上顯示的內容。只要應用程式啟動活動是使用者互動的直接結果,應用程式就不太可能受到這些限制影響。

如要進一步瞭解從背景啟動活動的建議替代做法,請參閱這份指南,瞭解如何在應用程式中提醒使用者注意時間敏感事件。

ID 和資料

本節列出與裝置 ID 和資料相關的異動。

移除聯絡人親和度

從 Android 10 開始,平台不會追蹤聯絡人親和資訊。因此,如果應用程式搜尋使用者的聯絡人,結果不會依互動頻率排序。

ContactsProvider 指南包含一則通知,說明自 Android 10 起,所有裝置上已淘汰的特定欄位和方法。

MAC 位址隨機化

在搭載 Android 10 以上版本的裝置上,系統預設會傳輸隨機 MAC 位址。

如果您的應用程式處理企業用途,平台會提供多項與 MAC 位址相關作業的 API:

  • 取得隨機 MAC 位址:裝置擁有者應用程式和設定檔擁有者應用程式可以呼叫 getRandomizedMacAddress(),擷取指派給特定網路的隨機 MAC 位址。
  • 取得實際的原廠 MAC 位址:裝置擁有者應用程式可以呼叫 getWifiMacAddress(),擷取裝置的實際硬體 MAC 位址。這個方法有助於追蹤裝置群組。

限制存取 /proc/net 檔案系統

在搭載 Android 10 以上版本的裝置上,應用程式無法存取 /proc/net,包括裝置的網路狀態資訊。需要存取這項資訊的應用程式 (例如 VPN) 應使用 NetworkStatsManagerConnectivityManager 類別。

無法重設的裝置 ID 限制

從 Android 10 開始,應用程式必須具備READ_PRIVILEGED_PHONE_STATE特殊權限,才能存取裝置的不可重設 ID,包括 IMEI 和序號。

受影響的方法如下:

如果應用程式沒有這項權限,但您仍嘗試要求取得無法重設的 ID 相關資訊,平台的回應會因目標 SDK 版本而異:

  • 如果應用程式指定 Android 10 以上版本,就會發生 SecurityException
  • 如果應用程式指定 Android 9 (API 級別 28) 以下版本,且具備 READ_PHONE_STATE 權限,則方法會傳回 null 或預留位置資料。否則會發生 SecurityException

許多用途都不需要無法重設的裝置 ID。舉例來說,如果您的應用程式使用無法重設的裝置 ID 進行廣告追蹤或使用者數據分析,請改用 Android 廣告 ID 處理這些特定用途。詳情請參閱「專屬 ID 的最佳做法」。

剪貼簿資料存取權受限

除非您的應用程式是預設輸入法編輯器 (IME),或是目前處於焦點狀態的應用程式,否則無法在 Android 10 以上版本存取剪貼簿資料。

保護 USB 裝置序號

如果應用程式指定 Android 10 以上版本為目標,使用者必須先授予應用程式存取 USB 裝置或配件的權限,應用程式才能讀取序號。

如要進一步瞭解如何使用 USB 裝置,請參閱設定 USB 主機指南。

攝影機和連線

本節列出相機中繼資料和連線 API 的專屬變更。

限制存取相機詳細資料和中繼資料

Android 10 變更了 getCameraCharacteristics() 方法預設傳回的資訊範圍。具體來說,應用程式必須具備 CAMERA 權限,才能存取這個方法傳回值中可能包含的裝置專屬中繼資料。

如要進一步瞭解這些變更,請參閱「需要權限的攝影機欄位」一節。

限制啟用和停用 Wi-Fi

指定 Android 10 以上版本為目標的應用程式無法啟用或停用 Wi-Fi。WifiManager.setWifiEnabled() 方法一律會傳回 false

如需提示使用者啟用及停用 Wi-Fi,請使用設定面板

限制直接存取已設定的 Wi-Fi 網路

為保護使用者隱私,只有系統應用程式和裝置原則控制器 (DPC) 才能手動設定 Wi-Fi 網路清單。特定 DPC 可以是裝置擁有者或設定檔擁有者。

如果應用程式指定 Android 10 以上版本,且不是系統應用程式或 DPC,則下列方法不會傳回實用資料:

如果應用程式需要連線至 Wi-Fi 網路,請使用下列替代方法:

部分電話、藍牙、Wi-Fi API 需要 FINE 位置存取權

如果應用程式指定的是 Android 10 以上版本,就必須具備 ACCESS_FINE_LOCATION 權限,才能使用 Wi-Fi、Wi-Fi Aware 或藍牙 API 中的多種方法。以下各節列出受影響的類別和方法。

電話通訊系統

Wi-Fi

藍牙

權限

本節說明 Android 權限模式的更新。

限制存取畫面內容

為保護使用者的螢幕內容,Android 10 變更了 READ_FRAME_BUFFERCAPTURE_VIDEO_OUTPUTCAPTURE_SECURE_VIDEO_OUTPUT 權限的範圍,禁止無聲存取裝置的螢幕內容。自 Android 10 起,這些權限僅限簽章存取

如要存取裝置螢幕內容,應用程式應使用 MediaProjection API,系統會顯示提示,要求使用者提供同意聲明。

在舊版應用程式中檢查使用者權限

如果您的應用程式指定使用 Android 5.1 (API 級別 22) 以下版本,使用者在搭載 Android 10 以上版本的裝置上首次使用應用程式時,會看到權限畫面,如圖 1 所示。使用者可以在這個畫面中,撤銷系統在安裝時授予應用程式的權限。

對話方塊的螢幕截圖
圖 1:使用者可透過對話方塊查看舊版權限

辨識體能活動

Android 10 導入了android.permission.ACTIVITY_RECOGNITION執行階段權限,適用於需要偵測使用者步數或分類使用者體能活動 (例如步行、騎單車或搭車) 的應用程式。這項設計旨在讓使用者在「設定」中瞭解裝置感應器資料的使用方式。

Google Play 服務中的某些程式庫 (例如活動辨識 APIGoogle 健身 API) 必須獲得使用者授權,才能提供結果。

裝置上唯一需要宣告這項權限的內建感應器步數計數器步數偵測器感應器。

如果應用程式指定 Android 9 (API 級別 28) 以下版本,且符合下列所有條件,系統會視需要自動授予應用程式 android.permission.ACTIVITY_RECOGNITION 權限:

  • 資訊清單檔案包含 com.google.android.gms.permission.ACTIVITY_RECOGNITION 權限。
  • 資訊清單檔案包含 android.permission.ACTIVITY_RECOGNITION 權限。

如果系統自動授予 android.permission.ACTIVITY_RECOGNITION 權限,應用程式在更新為以 Android 10 為目標平台後,仍會保留這項權限。不過,使用者隨時可以在系統設定中撤銷這項權限。

從使用者介面移除權限群組

在 Android 10 以上版本中,應用程式無法在使用者介面中查詢權限的分組方式