Android 6.0 API

Android 6.0 (M) 為使用者和應用程式開發人員提供新功能。本文件將介紹最常見的 API。

成為開發人員

如要開始建構適用於 Android 6.0 的應用程式,您必須先取得 Android SDK。然後使用 SDK Manager 下載 Android 6.0 SDK 平台和系統映像檔。

更新目標 API 級別

如要針對搭載 Android 的裝置最佳化應用程式,請將 targetSdkVersion 設為 "23",在 Android 系統映像檔上安裝應用程式並進行測試,然後以這項變更發布更新版應用程式。

如要使用 Android API 同時支援舊版,可以在程式碼中新增條件檢查系統 API 級別,然後再執行 minSdkVersion 不支援的 API。如要進一步瞭解如何維持回溯相容性,請參閱支援不同平台版本

如要進一步瞭解 API 級別的運作方式,請參閱「什麼是 API 級別?」一文。

指紋驗證

這個版本提供新的 API,可協助您在支援的裝置上使用指紋掃描功能驗證使用者。請將這些 API 與 Android KeyStore 系統搭配使用。

如要透過指紋掃描驗證使用者,請取得新 FingerprintManager 類別的例項並呼叫 authenticate() 方法。應用程式必須在配備指紋感應器的相容裝置上執行。您必須在應用程式中實作指紋驗證流程的使用者介面,並在 UI 中使用標準 Android 指紋圖示。生物特徵辨識驗證範例內含 Android 指紋圖示 (c_fp_40px.png)。請注意,如果您開發多個使用指紋驗證的應用程式,每個應用程式都必須分別驗證使用者的指紋。

如要在應用程式中使用這項功能,請先在資訊清單中新增 USE_FINGERPRINT 權限。

<uses-permission
        android:name="android.permission.USE_FINGERPRINT" />
顯示指紋驗證功能的行動裝置

如要查看指紋驗證的應用程式實作,請參閱生物特徵辨識驗證範例。如需瞭解如何將這些驗證 API 與其他 Android API 搭配使用的示範,請觀看「 指紋和付款 API」影片。

如果您要測試這項功能,請按照下列步驟操作:

  1. 如果尚未安裝 Android SDK 工具修訂版本 24.3,請先安裝。
  2. 依序前往「Settings」>「Security」>「Fingerprint」,在模擬器中註冊新的指紋,然後按照註冊指示操作。
  3. 使用模擬器以下列指令模擬指紋觸控事件。您可以使用相同指令,在鎖定螢幕或應用程式中模擬指紋觸控事件。
    adb -e emu finger touch <finger_id>
    

    在 Windows 上,您可能必須執行 telnet 127.0.0.1 <emulator-id>,然後執行 finger touch <finger_id>

確認憑證

您的應用程式可依據使用者上次解鎖裝置的時間進行驗證。這項功能可讓使用者不必再費心記住其他應用程式特定密碼,也不必再自行實作驗證使用者介面。應用程式應將此功能與公開或密鑰實作搭配使用,以便進行使用者驗證。

如要設定可在使用者成功驗證後重複使用相同金鑰的逾時時間長度,請在設定 KeyGeneratorKeyPairGenerator 時呼叫新的 setUserAuthenticationValidityDurationSeconds() 方法。

請避免過度顯示重新驗證對話方塊,應用程式應先嘗試使用密碼編譯物件,如果逾時時間已到期,請使用 createConfirmDeviceCredentialIntent() 方法重新在應用程式中驗證使用者。

應用程式連結

這個版本提供更強大的應用程式連結功能,強化 Android 的意圖系統。這項功能可讓您將應用程式與您擁有的網域建立關聯。平台可根據此關聯,決定要使用的預設應用程式來處理特定網頁連結,並且略過提示使用者選取應用程式的步驟。如要瞭解如何實作這項功能,請參閱「處理應用程式連結」。

自動備份應用程式

系統現在會為應用程式執行自動完整資料備份與還原作業。應用程式必須指定 Android 6.0 (API 級別 23) 為目標版本,才能啟用此行為;您無需新增任何其他程式碼。如果使用者刪除 Google 帳戶,他們的備份資料也會一併刪除。如要瞭解這項功能的運作方式,以及如何在檔案系統上設定備份項目,請參閱設定應用程式自動備份

直接分享

顯示「直接分享」功能的行動裝置下半部

這個版本提供的 API 可讓使用者輕鬆快速地分享內容。您現在可以定義直接分享目標,在應用程式中啟動特定活動。使用者可透過「Share」選單看到這些直接分享目標。這項功能可讓使用者在其他應用程式中,將內容分享給目標,例如聯絡人。舉例來說,直接分享目標可能會在其他社群網路應用程式中啟動活動,讓使用者能直接將內容分享給應用程式中的特定好友或社群。

如要啟用直接分享目標,您必須定義擴充 ChooserTargetService 類別的類別。在資訊清單中宣告服務。請在該宣告中使用 SERVICE_INTERFACE 動作指定 BIND_CHOOSER_TARGET_SERVICE 權限和意圖篩選器。

以下範例說明如何在資訊清單中宣告 ChooserTargetService

<service android:name=".ChooserTargetService"
        android:label="@string/service_name"
        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
    <intent-filter>
        <action android:name="android.service.chooser.ChooserTargetService" />
    </intent-filter>
</service>

針對您要向 ChooserTargetService 公開的每個活動,在應用程式資訊清單中加入名稱為 "android.service.chooser.chooser_target_service"<meta-data> 元素。

<activity android:name=".MyShareActivity”
        android:label="@string/share_activity_label">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
    </intent-filter>
<meta-data
        android:name="android.service.chooser.chooser_target_service"
        android:value=".ChooserTargetService" />
</activity>

語音互動

這個版本提供新的語音互動 API,並搭配 Voice Actions,可讓您在應用程式中建構對話式語音體驗。呼叫 isVoiceInteraction() 方法,判斷語音指令是否觸發活動。如果答案為肯定,應用程式可以使用 VoiceInteractor 類別要求使用者提供語音確認資訊、從選項清單中加以選取,以及執行其他操作。

大多數的語音互動都源自使用者的語音指令。不過,語音互動活動也可以在無需使用者輸入內容的情況下開始執行。舉例來說,透過語音互動啟動的另一個應用程式也可以傳送意圖來啟動語音互動。如要判斷活動是透過使用者語音查詢或其他語音互動應用程式啟動,請呼叫 isVoiceInteractionRoot() 方法。如果有其他應用程式啟動了您的活動,這個方法會傳回 false。接著,應用程式可能會提示使用者確認他們是想執行的操作。

如要進一步瞭解如何實作語音指令,請造訪語音操作開發人員網站

Assist API

這個版本提供新的方式,讓使用者透過助理與您的應用程式互動。如要使用這項功能,使用者必須啟用 Google 助理才能使用目前背景資訊。啟用後,使用者只要在任何應用程式中長按「主畫面」按鈕即可叫出 Google 助理。

應用程式可以選擇不與 Google 助理分享目前背景資訊,方法是設定 FLAG_SECURE 標記。除了平台傳送給 Google 助理的標準資訊組合外,應用程式也可以使用新的 AssistContent 類別分享其他資訊。

如要為 Google 助理提供更多應用程式背景資訊,請按照下列步驟操作:

  1. 實作 Application.OnProvideAssistDataListener 介面。
  2. 使用 registerOnProvideAssistDataListener() 註冊這個事件監聽器。
  3. 為了提供活動專屬的情境資訊,請覆寫 onProvideAssistData() 回呼,並視需要覆寫新的 onProvideAssistContent() 回呼。

採用的儲存裝置

本次更新後,使用者可以採用外部儲存裝置,例如 SD 卡。採用外部儲存裝置時,裝置會加密並格式化,使裝置的運作方式與內部儲存空間相同。使用者可以利用這項功能,在儲存裝置之間移動應用程式和私人資料。移動應用程式時,系統會遵循資訊清單中的 android:installLocation 偏好設定。

請注意,如果您的應用程式會存取下列 API 或欄位,請注意,當應用程式在內部和外部儲存裝置之間移動時,這些 API 或欄位傳回的檔案路徑將動態變更。建構檔案路徑時,強烈建議您一律以動態方式呼叫這些 API。請勿使用硬式編碼檔案路徑,或是保留先前建構的完整檔案路徑。

如要對這項功能進行偵錯,您可以執行以下指令,允許採用透過 USB On-the-Go (OTG) 傳輸線連接至 Android 裝置的 USB 隨身碟:

$ adb shell sm set-force-adoptable true

通知

這個版本為通知新增下列 API 變更:

支援藍牙觸控筆

這個版本改善了使用藍牙觸控筆的使用者輸入功能。使用者可以將相容的藍牙觸控筆與手機或平板電腦配對,並與其連線。連接時,觸控螢幕的位置資訊會融合觸控筆的壓力和按鈕資訊,提供比單用觸控螢幕更廣泛的表達內容。應用程式可在活動中註冊 View.OnContextClickListenerGestureDetector.OnContextClickListener 物件,以便監聽觸控筆按鈕按下動作並執行次要動作。

使用 MotionEvent 方法和常數偵測觸控筆按鈕互動:

改善藍牙低功耗掃描功能

如果應用程式執行藍牙低功耗掃描,請使用新的 setCallbackType() 方法,指定您希望系統在首次找到或長時間看到廣告封包時通知回呼,也就是符合 ScanFilter 組合的廣告封包。這種掃描方法比前一個平台版本提供的掃描效率更高。

無線基地台 2.0 版本 1 支援

此版本支援 Nexus 6 和 Nexus 9 裝置的 Hotspot 2.0 版本 1 規格。如要在應用程式中佈建無線基地台 2.0 憑證,請使用 WifiEnterpriseConfig 類別的新方法,例如 setPlmn()setRealm()。在 WifiConfiguration 物件中,您可以設定 FQDNproviderFriendlyName 欄位。新的 isPasspointNetwork() 方法會指出偵測到的網路是否代表無線基地台 2.0 存取點。

4K 顯示模式

平台現在可讓應用程式要求在相容的硬體上,將螢幕解析度升級為 4K 算繪。如要查詢目前的實體解析度,請使用新的 Display.Mode API。請注意,如果 UI 以較低邏輯解析度繪製,且放大為較大的實體解析度,請注意 getPhysicalWidth() 方法傳回的實體解析度可能與 getSize() 回報的邏輯解析度不同。

您可以設定應用程式視窗的 preferredDisplayModeId 屬性,要求系統在執行時變更應用程式內的實體解析度。如要切換至 4K 螢幕解析度,這項功能就能派上用場。使用 4K 顯示模式時,UI 會繼續以原始解析度 (例如 1080p) 算繪,且擴充為 4K,但 SurfaceView 物件可能會以原生解析度顯示內容。

可主題的 ColorStateLists

搭載 Android 6.0 (API 級別 23) 的裝置現可在 ColorStateList 中支援主題屬性。Resources.getColorStateList()Resources.getColor() 方法已淘汰。如要呼叫這些 API,請改為呼叫新的 Context.getColorStateList()Context.getColor() 方法。這些方法也可以透過 ContextCompat 在 v4 Appcompat 程式庫中使用。

音訊功能

這個版本強化了 Android 上的音訊處理功能,包括:

  • 支援 MIDI 通訊協定,以及新的 android.media.midi API。使用這些 API 傳送及接收 MIDI 事件。
  • 新增 AudioRecord.BuilderAudioTrack.Builder 類別,可分別建立數位音訊擷取和播放物件,並設定音訊來源和接收器屬性,覆寫系統預設值。
  • 用來與音訊和輸入裝置建立關聯的 API 掛鉤。如果應用程式允許使用者透過與 Android TV 連線的遊戲控制器或遙控器啟動語音搜尋,這種做法特別實用。使用者開始搜尋時,系統會叫用新的 onSearchRequested() 回呼。如要判斷使用者的輸入裝置是否有內建麥克風,請從該回呼擷取 InputDevice 物件,然後呼叫新的 hasMicrophone() 方法。
  • 新的 getDevices() 方法可讓您擷取目前連線至系統的所有音訊裝置清單。如果您想讓系統在音訊裝置連線或中斷連線時通知您的應用程式,您也可以註冊 AudioDeviceCallback 物件。

影片功能

這個版本為影片處理 API 新增了多項功能,包括:

  • 新增 MediaSync 類別,可協助應用程式同步轉譯音訊和影片串流。音訊緩衝區會以非阻塞方式提交,並透過回呼傳回。並支援動態播放速率。
  • 新增 EVENT_SESSION_RECLAIMED 事件,表示資源管理員已收回應用程式開啟的工作階段。如果您的應用程式使用 DRM 工作階段,建議您處理這個事件,並確保未使用已收回的工作階段。
  • 新增 ERROR_RECLAIMED 錯誤代碼,表示資源管理員已收回轉碼器使用的媒體資源。如果遇到這種情況,必須釋放轉碼器,因為其移至終端機狀態。
  • 新增 getMaxSupportedInstances() 介面,取得支援並行轉碼器執行個體的數量上限提示。
  • 新增 setPlaybackParams() 方法,可用於設定快速或慢動作播放媒體播放速率。還會自動拉長或加快音訊播放速度,與影片相接。

相機功能

這個版本包含下列新 API,可用於存取相機的手電筒及相機重新處理圖片:

手電筒 API

如果相機裝置有閃光燈,您可以呼叫 setTorchMode() 方法,開啟或關閉閃光燈設備的手電筒模式,不必開啟相機裝置。應用程式沒有閃光燈裝置或相機裝置的專屬擁有權。手電筒模式會關閉,當相機裝置無法使用,或其他相機資源無法使用時,將無法使用手電筒模式。其他應用程式也可以呼叫 setTorchMode() 來關閉手電筒模式。最後一個開啟手電筒模式的應用程式關閉時,手電筒模式就會關閉。

您可以呼叫 registerTorchCallback() 方法,註冊回呼以接收手電筒模式狀態的通知。第一次註冊回呼時,系統會立即使用手電筒模式狀態呼叫,所有目前已知相機裝置的閃光燈模式 (具有閃光燈單元)。如果成功開啟或關閉手電筒模式,系統會叫用 onTorchModeChanged() 方法。

重新處理 API

Camera2 API 則經過擴充以支援 YUV 和私人不透明格式圖片重新處理。如要判斷這些重新處理功能是否可用,請呼叫 getCameraCharacteristics() 並檢查 REPROCESS_MAX_CAPTURE_STALL 鍵。如果裝置支援重新處理功能,您可以呼叫 createReprocessableCaptureSession() 來建立可重新處理的相機擷取工作階段,並建立輸入緩衝區重新處理的要求。

使用 ImageWriter 類別,將輸入緩衝區流程連結至相機重新處理輸入內容。如要取得空白緩衝區,請遵循以下程式設計模型:

  1. 呼叫 dequeueInputImage() 方法。
  2. 將資料填入輸入緩衝區。
  3. 呼叫 queueInputImage() 方法,將緩衝區傳送至相機。

如果您將 ImageWriter 物件與 PRIVATE 圖片搭配使用,應用程式就無法直接存取圖片資料。請改為呼叫 queueInputImage() 方法,不要複製任何緩衝區,將 PRIVATE 圖片直接傳遞至 ImageWriter

ImageReader 類別現在支援 PRIVATE 格式圖片串流。這項支援功能可讓應用程式維持 ImageReader 輸出圖片的圓形圖片佇列、選取一或多張圖片,並傳送至 ImageWriter 進行相機重新處理。

Android for Work 功能

這個版本包含下列適用於 Android for Work 的新 API:

  • 公司自有、單一用途裝置的增強型控制項:裝置擁有者現在可以控制下列設定,改善企業擁有、單一用途 (COSU) 裝置的管理作業:
  • 裝置擁有者以靜音模式安裝及解除安裝應用程式:裝置擁有者現在可以使用 PackageInstaller API (不受 Google Play for Work 影響) 自動安裝及解除安裝應用程式。您現在可以透過裝置擁有者佈建裝置,在使用者不需進行互動的情況下即可擷取及安裝應用程式。如要在不啟用 Google 帳戶的情況下啟用資訊站或其他裝置的單鍵佈建功能,這項功能就非常實用。
  • 靜音企業憑證存取權: 當應用程式呼叫 choosePrivateKeyAlias() 時,在提示使用者選取憑證之前,設定檔或裝置擁有者現在可以呼叫 onChoosePrivateKeyAlias() 方法,在不通知的情況下將別名提供給要求的應用程式。這項功能可讓您在使用者不需互動的情況下,將憑證存取權授予受管理應用程式。
  • 自動接受系統更新。透過 setSystemUpdatePolicy() 設定系統更新政策,裝置擁有者現在可以自動接受系統更新 (例如資訊站裝置的情況),或是延後更新,並防止使用者執行更新 (最多 30 天)。此外,管理員可以設定每日必須更新的時間範圍,例如在資訊站裝置未使用期間。有可用的系統更新時,系統會檢查裝置政策控制器應用程式是否已設定系統更新政策,並據此運作。
  • 委派憑證安裝:設定檔或裝置擁有者現在可以授權第三方應用程式呼叫下列 DevicePolicyManager 憑證管理 API:
  • 行動裝置顯示 Android for Work 中的工作狀態通知功能
  • 數據用量追蹤:設定檔或裝置擁有者現在可以使用新的 NetworkStatsManager 方法,查詢「設定」>「資料」用量中顯示的資料用量統計資料。系統會自動授權設定檔擁有者查詢自己管理的設定檔資料,裝置擁有者則能存取受管理主要使用者的使用資料。
  • 執行階段權限管理:

    設定檔或裝置擁有者可針對使用 setPermissionPolicy() 的所有應用程式執行階段要求設定權限政策,藉此提示使用者授予權限,或是自動授予或拒絕權限。如果設定後者政策,使用者就無法在「設定」的應用程式權限畫面中,修改設定檔或裝置擁有者所做的選擇。

  • 設定中的 VPN:現在可依序前往「設定」>「更多」>「VPN」,查看 VPN 應用程式。此外,隨附 VPN 使用的通知現在專為該 VPN 的設定方式而設計。對於設定檔擁有者,通知只會針對受管理的設定檔和/或個人資料夾設定 VPN。就裝置擁有者而言,通知是關於是否要為整部裝置設定 VPN。
  • 工作狀態通知:現在,只要受管理設定檔的應用程式在前景有活動,就會顯示狀態列公事包圖示。此外,如果裝置直接解鎖受管理設定檔中應用程式的活動,系統會顯示浮動式訊息,通知使用者他們位於工作資料夾中。