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 搭配使用的示範,影片請看 指紋和 Payment 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,您可以搭配使用語音操作,在應用程式中建構對話語音體驗。呼叫 isVoiceInteraction() 方法,判斷語音操作是否觸發了您的活動。如果是的話,應用程式可以使用 VoiceInteractor 類別要求使用者提供語音確認、從選項清單中選取所需項目,以及執行其他操作。

大多數的語音互動是由使用者語音操作產生。不過,語音互動活動也可以由使用者自行輸入。例如,其他透過語音互動啟動的應用程式也可以傳送意圖,啟動語音互動。如要判斷活動是透過使用者語音查詢或其他語音互動應用程式啟動,請呼叫 isVoiceInteractionRoot() 方法。如果其他應用程式啟動您的活動,這個方法會傳回 false。應用程式可能會提示使用者確認這項操作。

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

Assist API

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

您的應用程式可以設定 FLAG_SECURE 標記,選擇不與 Google 助理分享目前的結構定義。除了平台傳送至 Google 助理的標準資訊組合外,應用程式還可以使用新的 AssistContent 類別分享其他資訊。

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

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

可採用的儲存裝置

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

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

如要對這項功能進行偵錯,您可以執行以下指令,啟用透過 USB 隨身 (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() 方法。這些方法也可在 v4 appcompat 程式庫中透過 ContextCompat 使用。

音訊功能

這個版本改善了 Android 音訊處理功能,包括:

  • 支援使用新的 android.media.midi API 的 MIDI 通訊協定。使用這些 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。
  • 工作狀態通知:現在,當受管理設定檔中的應用程式在前景運作時,就會顯示狀態列圖示。此外,如果裝置直接解鎖受管理設定檔中的應用程式活動,系統會顯示浮動式訊息,通知使用者他們位於工作資料夾內。