Android 10 的隱私權變更

Android 10 (API 級別 29) 推出了多項功能和行為變更,以便進一步保護使用者的隱私權。這些異動可讓使用者更清楚瞭解及掌控自己的資料,以及授予應用程式的功能。這些功能可能會導致應用程式依賴的特定行為或資料,與舊版平台的行為有所不同。如果您的應用程式遵循目前處理使用者資料的最佳做法,對應用程式造成的影響應該會降到最低。

本頁面列出各項變更的摘要。

主要變更

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

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

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

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

在背景存取裝置位置資訊需要授權

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

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

  • 屬於應用程式的活動會顯示在畫面上。
  • 應用程式正在執行前景服務,且已宣告 location前景服務類型

    如要為應用程式中的服務宣告前景服務類型,請將應用程式的 targetSdkVersioncompileSdkVersion 設為 29 以上。進一步瞭解前景服務如何繼續使用者啟動的動作,這些動作需要存取位置資訊。

如果應用程式建立並監控地理圍欄,且指定 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,該 API 會顯示提示,要求使用者提供同意聲明。

針對舊版應用程式進行使用者權限檢查

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

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

體能活動辨識

Android 10 為需要偵測使用者步數或分類使用者體能活動 (例如步行、騎單車或在車輛中移動) 的應用程式,推出 android.permission.ACTIVITY_RECOGNITION 執行階段權限。這項功能可讓使用者瞭解「設定」中如何使用裝置感應器資料。

Google Play 服務中的部分程式庫 (例如 Activity Recognition APIGoogle Fit 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 為目標版本後,應用程式會保留該權限。不過,使用者隨時可以在系統設定中撤銷這項權限。

已從 UI 中移除權限群組

自 Android 10 起,應用程式無法在 UI 中查詢權限的群組方式