Android 6.0 (M) 也為使用者和應用程式開發人員提供了新功能本文件將簡介 最知名的 API
立即開發
如要開始建構適用於 Android 6.0 的應用程式,您必須先將 取得 Android SDK。然後使用 SDK Manager 下載 Android 6.0 SDK 平台和系統映像檔
更新目標 API 級別
為了針對搭載 Android 的裝置進一步最佳化應用程式,
將「targetSdkVersion
」設為
"23"
,請在 Android 裝置上安裝您的應用程式
系統映像檔並加以測試,然後以
這項變更。
你可以使用 Android API,同時支援舊版 API
並在程式碼中新增要檢查系統 API 級別的條件。
執行 minSdkVersion
不支援的 API 之前。
如要進一步瞭解如何維持回溯相容性,請參閱支援
不同平台版本:
如要進一步瞭解 API 級別的運作方式,請參閱「什麼是 API? 關卡?
指紋驗證
這個版本提供新的 API,可讓您透過掃描使用者的指紋來驗證身分 請將這些 API 與 Android KeyStore 系統。
如要透過指紋掃描功能驗證使用者,請取得新的
FingerprintManager
類別並呼叫
authenticate()
方法。應用程式必須在相容裝置上執行
搭載指紋感應器的裝置您必須實作指紋的使用者介面
驗證流程,並在使用者介面中使用標準 Android 指紋圖示。
Android 指紋圖示 (c_fp_40px.png
) 位於
生物特徵辨識驗證範例。
如果你要開發多個使用指紋驗證功能的應用程式,請注意每個應用程式都必須
獨立驗證使用者的指紋
如要在應用程式中使用這項功能,請先新增
USE_FINGERPRINT
權限。
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
![行動裝置顯示指紋驗證功能](https://developer.android.google.cn/static/images/android-6.0/fingerprint-screen.png?authuser=19&hl=zh-tw)
如要查看指紋驗證的應用程式實作情形,請參閱 生物特徵辨識驗證範例。 取得使用這些驗證機制的示範 搭配使用 API 與其他 Android API 的情形 指紋和 Payment API。
如果您要測試這項功能,請按照下列步驟操作:
- 如果您尚未安裝 Android SDK 工具修訂版本 24.3,請先安裝。
- 在模擬器中註冊新指紋: 設定 >安全性 >指紋,然後按照註冊說明操作。
- 使用模擬器模擬指紋觸控事件,
。使用相同指令在螢幕鎖定畫面上模擬指紋觸控事件,或是
。
adb -e emu finger touch <finger_id>
在 Windows 上,您可能需要執行
telnet 127.0.0.1 <emulator-id>
再加上finger touch <finger_id>
。
確認憑證
應用程式可根據使用者上次解鎖裝置的時間,驗證使用者。這個 這項功能可讓使用者不必記住額外的應用程式專用密碼, 實作自己的驗證使用者介面應用程式應在以下項目中使用此功能: 以及實作使用者驗證所需的公開或密鑰。
只要設定逾時期限,就能在使用者成功後重複使用同一金鑰的逾時時間。
並呼叫
setUserAuthenticationValidityDurationSeconds()
方法進行KeyGenerator
或
KeyPairGenerator
。
請避免過度顯示重新驗證對話方塊,您的應用程式應嘗試使用
加密物件,如果逾時期限過後,再使用
createConfirmDeviceCredentialIntent()
在應用程式中重新驗證使用者的方法。
應用程式連結
這個版本提供更強大的應用程式連結功能,強化 Android 意圖系統。 這項功能可讓你將應用程式與擁有的網域建立關聯。根據此 平台就能決定用來處理特定 並略過提示使用者選取應用程式的步驟。如要瞭解如何實作這項功能,請參閱: 處理應用程式連結。
自動備份應用程式
系統現在會自動為應用程式執行完整資料備份與還原作業。您的應用程式必須指定 Android 6.0 (API 級別 23) 啟用此行為。您不必新增任何程式碼 如果使用者刪除自己的 Google 帳戶,他們的備份資料也會一併刪除。如要瞭解 功能的運作方式,以及如何設定要在檔案系統上備份的內容,請參閱 設定應用程式自動備份功能。
直接分享
![顯示「直接分享」功能的行動版底部](https://developer.android.google.cn/static/images/android-6.0/direct-share-screen.png?authuser=19&hl=zh-tw)
此版本提供 API,讓使用者直覺又快速地共用內容。您現在可以 定義直接共用目標,用來在應用程式中啟動特定活動。這些直接分享 「共用」選單向使用者顯示的目標對象資料。這項功能可讓使用者 在其他應用程式中傳送給指定目標 (例如聯絡人) 的內容舉例來說,直接共用目標可能會 在其他社群網路應用程式中啟動活動,讓使用者可以直接將內容分享到 應用程式中的特定朋友或社群。
如要啟用直接共用目標,您必須定義一個用來擴充
ChooserTargetService
類別。聲明
服務。在該宣告中
BIND_CHOOSER_TARGET_SERVICE
權限和
意圖篩選器
SERVICE_INTERFACE
動作。
以下範例說明如何宣告
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
,新增
名稱為 <meta-data>
元素
"android.service.chooser.chooser_target_service"
。
<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
。接著,應用程式可能會提示使用者確認
他們預期的是這項動作
如要進一步瞭解如何實作語音操作,請參閱 語音操作開發人員網站。
輔助 API
這個版本可讓使用者透過助理與您的應用程式互動,如要使用此功能 功能,使用者必須啟用助理才能使用目前的背景資訊。啟用後 只要在任何應用程式中長按「主畫面」按鈕,即可叫出助理。
您的應用程式可以選擇不與 Google 助理分享目前背景資訊,方法是將
FLAG_SECURE
標記。除了
平台傳送給 Google 助理的標準資訊集
透過新的 AssistContent
類別取得更多資訊。
如要為助理提供額外的應用程式相關資訊,請按照下列步驟操作:
- 實作
Application.OnProvideAssistDataListener
介面。 - 註冊此事件監聽器:
registerOnProvideAssistDataListener()
。 - 為了提供活動專屬的情境資訊,請覆寫
onProvideAssistData()
回呼,並視需要另外新增onProvideAssistContent()
回呼。
可採用的儲存裝置
本次更新後,使用者就可以採用外部儲存裝置 (例如 SD 卡)。採用
外部儲存裝置會加密及格式化,以如同內部儲存空間。這個
功能,讓使用者在儲存裝置之間移動應用程式和其中的私人資料。時間
移動應用程式時,系統會遵守
android:installLocation
敬上
設定偏好清單
請注意,如果您的應用程式會存取下列 API 或欄位,請注意這些 API 或欄位傳回的檔案路徑 應用程式會在內部和外部儲存裝置之間移動時動態變化。 建立檔案路徑時,強烈建議您一律以動態方式呼叫這些 API。 請勿使用硬式編碼檔案路徑,或保留先前建構的完整檔案路徑。
Context
方法:ApplicationInfo
欄位:
如要偵錯這項功能,您可以啟用採用以下規格的 USB 隨身碟 執行下列指令,透過 USB 路上型 (OTG) 傳輸線連接至 Android 裝置:
$ adb shell sm set-force-adoptable true
通知
這個版本新增了下列通知 API 變更:
- 新的
INTERRUPTION_FILTER_ALARMS
篩選器層級: 對應至新的「僅限鬧鐘」請勿打擾模式。 - 新的「
CATEGORY_REMINDER
」類別值,用於 區分使用者排定的提醒和其他活動 (CATEGORY_EVENT
) 和鬧鐘 (CATEGORY_ALARM
)。 - 可附加至通知的全新
Icon
類別 透過setSmallIcon()
和setLargeIcon()
方法。同樣地,addAction()
方法現在接受Icon
物件,而非 可繪製資源 ID。 - 新的
getActiveNotifications()
方法,可讓您 應用程式,知道目前有哪些通知已經生效。
支援藍牙觸控筆
此版本改善了使用藍牙觸控筆的使用者輸入內容。使用者可以配對
,將相容的藍牙觸控筆與手機或平板電腦連線。連線後就定位
將觸控螢幕上的資訊與觸控筆的壓力和按鈕資訊結合
提供的表達方式比單純觸控螢幕更廣泛。應用程式可以監聽
註冊觸控筆按鈕並執行次要動作
「View.OnContextClickListener
」和
活動中的 GestureDetector.OnContextClickListener
個物件。
使用 MotionEvent
方法和常數偵測觸控筆按鈕
互動:
- 如果使用者輕觸有按鈕且位於應用程式螢幕上的觸控筆,
getTooltype()
方法會傳回TOOL_TYPE_STYLUS
。 - 指定 Android 6.0 (API 級別 23) 的應用程式:
getButtonState()
方法會在使用者回呼時傳回BUTTON_STYLUS_PRIMARY
按下主要觸控筆按鈕。如果觸控筆有第二個按鈕,系統會傳回相同方法BUTTON_STYLUS_SECONDARY
。如果使用者按下 就會同時傳回兩個值 (BUTTON_STYLUS_PRIMARY
|BUTTON_STYLUS_SECONDARY
)。 -
如果應用程式指定較低的平台版本,
getButtonState()
方法會傳回BUTTON_SECONDARY
(按下主要的觸控筆按鈕),BUTTON_TERTIARY
(用於次要觸控筆按鈕),或兩者皆選。
改善藍牙低功耗掃描效能
如果您的應用程式會執行藍牙低功耗掃描,請使用新的
setCallbackType()
方法,用於指定您希望系統初次發現回呼時,或是在
與 ScanFilter
設定相符的通告封包這個
相較於上一個平台版本,掃描方法更省電。
無線基地台 2.0 版 1 支援
這個版本支援 Nexus 6 和 Nexus 9 裝置的無線基地台 2.0 版規格 1。目的地:
在應用程式中佈建無線基地台 2.0 憑證,請使用
WifiEnterpriseConfig
類別,例如
「setPlmn()
」和
setRealm()
。在
WifiConfiguration
物件,您可以設定
FQDN
和
providerFriendlyName
欄位。
新的 isPasspointNetwork()
方法會指出是否偵測到
網路代表無線基地台 2.0 存取點
4K 顯示模式
平台現在允許應用程式要求將螢幕解析度升級為 4K 算繪
相容。如要查詢目前的實體解析度,請使用新的
Display.Mode
API。如果 UI 繪製的邏輯解析度較低,且
提高到更大的實體解析度,請注意,實體解析度
getPhysicalWidth()
方法的傳回值可能與邏輯不同
由「getSize()
」回報解析度。
您可以在應用程式執行期間,要求系統變更應用程式的實體解析度,方法是設定
應用程式的 preferredDisplayModeId
屬性
視窗。如果想切換成 4K 螢幕解析度,這項功能就能派上用場。4K 畫質
模式時,UI 將繼續以原始解析度 (例如 1080p) 顯示,並放大為
4K,但 SurfaceView
物件可能會以原生解析度顯示內容。
主題化 ColorStateLists
現已支援在以下語言中使用主題屬性:
ColorStateList
適用於搭載 Android 6.0 (API 級別 23) 的裝置。
「Resources.getColorStateList()
」和
Resources.getColor()
種方法
已淘汰。如果您呼叫這些 API,請呼叫
Context.getColorStateList()
或
Context.getColor()
方法。這些方法是
也能透過 ContextCompat
取得 v4 appcompat 程式庫。
音訊功能
這個版本強化了 Android 的音訊處理功能,包括:
- 支援 MIDI
與新的
android.media.midi
API 整合使用這些 API 傳送及接收 MIDI 事件。 - 新的「
AudioRecord.Builder
」和「AudioTrack.Builder
」 類別分別建立數位音訊擷取和播放物件,以及設定音訊 來源和接收器屬性,以覆寫系統預設值。 - 用於連結音訊和輸入裝置的 API 掛鉤。這對您的應用程式來說特別實用
可讓使用者透過與 Android 裝置連線的遊戲控制器或遙控器啟動語音搜尋。
電視節目系統會叫用新的
onSearchRequested()
回呼。判斷使用者的輸入裝置是否內建 請從該回呼擷取InputDevice
物件,然後呼叫 新的hasMicrophone()
方法。 - 新的
getDevices()
方法,可讓您 擷取目前連線至系統的所有音訊裝置清單。您也可以註冊AudioDeviceCallback
物件 (如果您想系統通知應用程式) 音訊裝置連線或中斷連線時。
影片功能
這個版本為影片處理 API 加入新功能,包括:
- 新增
MediaSync
類別,可協助應用程式同步轉譯 例如音訊和影像串流音訊緩衝區會以非阻斷方式提交, 透過回呼回傳。並支援動態播放速率。 - 新增
EVENT_SESSION_RECLAIMED
事件,表示 資源管理員已將應用程式開啟的工作階段收回。如果您的應用程式使用數位著作權管理工作階段, 您應該處理這個事件,並且避免使用回收的工作階段。 - 新增
ERROR_RECLAIMED
錯誤代碼,表示 由資源管理員收回轉碼器使用的媒體資源。不過, 轉碼器已變更為最終狀態,因此必須釋放。 - 新增
getMaxSupportedInstances()
介面,取得支援的數量上限 並行轉碼器執行個體。 - 新的
setPlaybackParams()
方法可設定快速或 慢動作播放還可自動延展或加快音訊播放速度: 與影片相輔相成
相機功能
這個版本包含下列新 API,可用於存取相機閃光燈,以及 相機重新處理圖片:
手電筒 API
如果相機裝置有閃光燈,您可以呼叫
setTorchMode()
方法,在不打開相機裝置的情況下,開啟或關閉閃光燈模式的手電筒模式。應用程式
沒有閃光燈裝置或相機裝置的專屬擁有權。手電筒模式已開啟
當相機裝置無法使用或出現其他相機時,手機關機時無法使用
會導致手電筒運作的資源無法使用。其他應用程式也能進行通話
setTorchMode()
關閉手電筒模式當最後一個開啟手電筒模式的應用程式關閉時,手電筒
模式已關閉。
您可以註冊回呼,接收手電筒模式狀態的通知,方法是呼叫
registerTorchCallback()
方法。首次註冊回呼時,會立即使用手電筒模式呼叫
含有閃光燈裝置目前所有已知相機裝置的狀態。如果手電筒模式已開啟
關閉成功時
onTorchModeChanged()
方法。
重新處理 API
Camera2
API 已擴充,支援 YUV 和私密
不透明格式的圖片重新處理。如要判斷是否可以使用這些重新處理功能,
呼叫 getCameraCharacteristics()
並查看
REPROCESS_MAX_CAPTURE_STALL
鍵。如果
裝置支援重新處理功能,您只要呼叫
createReprocessableCaptureSession()
、
以及建立輸入緩衝區重新處理的要求
使用 ImageWriter
類別將輸入緩衝區資料連結至相機
重新處理輸入內容如要取得空的緩衝區,請按照以下程式設計模型操作:
- 呼叫
dequeueInputImage()
方法。 - 將資料填入輸入緩衝區。
- 呼叫
queueInputImage()
方法。
如果您將 ImageWriter
物件與
PRIVATE
圖片,您的應用程式無法存取該圖片
資料。請改為將 PRIVATE
圖片直接傳遞至
ImageWriter
,方法是呼叫
queueInputImage()
方法
但不需複製任何緩衝區副本
ImageReader
類別現已支援
PRIVATE
格式的圖片串流。這項支援服務可讓應用程式
維護 ImageReader
輸出圖像的圓形圖片佇列,請選取其中一張或
更多圖片,並傳送至 ImageWriter
進行相機重新處理。
Android for Work 功能
這個版本包含下列新的 Android for Work API:
- 針對公司擁有的單一使用裝置加強控管功能:裝置擁有者
現在可以控制下列設定,讓
單一公司擁有的單次使用 (COSU) 裝置:
- 使用鍵盤上的
setKeyguardDisabled()
方法。 - 停用或重新啟用狀態列 (包括快速設定、通知和
啟動 Google 即時資訊的瀏覽向上滑動手勢)。
setStatusBarDisabled()
方法。 - 使用
UserManager
常數停用或重新啟用安全啟動功能DISALLOW_SAFE_BOOT
。 - 避免在連接
STAY_ON_WHILE_PLUGGED_IN
常數。
- 使用鍵盤上的
- 裝置擁有者自動安裝及解除安裝應用程式:裝置擁有者現在可以
使用
PackageInstaller
,以無訊息方式安裝及解除安裝應用程式 API,與 Google Play for Work 無關。您現在可以透過裝置擁有者佈建裝置,前提是: 在使用者沒有進行互動的情況下,就能擷取並安裝應用程式。這個功能在啟用一鍵操作功能時很實用 在不啟用 Google 帳戶的情況下佈建資訊站或其他這類裝置。 - 自動存取企業憑證: 應用程式呼叫時
choosePrivateKeyAlias()
, 使用者現在可以在系統提示選取憑證前,由「設定檔」或「裝置擁有者」呼叫onChoosePrivateKeyAlias()
」方法,在不通知使用者的情況下,將別名提供給要求的應用程式。這項功能 受管理應用程式無需使用者互動,就能存取憑證。 - 自動接受系統更新。設定系統更新政策時
setSystemUpdatePolicy()
, 裝置擁有者現在可以自動接受系統 (例如 Kiosk 裝置發生更新),或延後更新並阻止更新 最長 30 天此外,管理員可以在 例如裝置處於未使用狀態的時段時間 有可用的系統更新,系統會檢查裝置政策控制器應用程式是否已設定系統 更新政策並據此運作。 -
安裝委派憑證:設定檔或裝置擁有者現在可以授予
第三方應用程式可以呼叫這些
DevicePolicyManager
憑證 Management API: - 追蹤數據用量:現在起,設定檔或裝置擁有者可以查詢
可以在設定 > 中查看資料使用統計資料透過新的
NetworkStatsManager
方法。自動授予商家檔案擁有者 權限查詢所管理的設定檔資料,裝置擁有者則能夠存取使用資料 受管理的主要使用者 - 執行階段權限管理:
設定檔或裝置擁有者可以設定權限政策 適用於所有應用程式的
setPermissionPolicy()
,提示使用者授予權限,或自動授予或 並在背景中拒絕權限如果設定後者,使用者就無法 前往應用程式權限畫面,修改由設定檔或裝置擁有者所做的選擇: 設定。 - 「設定」中的 VPN:VPN 應用程式現在會顯示在以下位置: 設定 >更多 >VPN: 此外,隨附的 VPN 用量通知現在著重於該 VPN 功能 專案。對於設定檔擁有者,通知專用於是否已設定 VPN 建立受管理設定檔和/或個人設定檔。如果是裝置擁有者,則通知如下: 專用於是否要為整部裝置設定 VPN。
- 工作狀態通知:現在每當 受管理設定檔中的應用程式在前景有活動。此外,如果裝置 已直接解鎖受管理設定檔中應用程式的活動,並顯示通知浮動式訊息 您在工作資料夾中提供的資訊。
![手機顯示了 Android for Work 中的工作狀態通知功能](https://developer.android.google.cn/static/images/android-6.0/work-profile-screen.png?authuser=19&hl=zh-tw)