page.title=API 總覽 page.keywords=預覽,sdk,相容性 page.tags=previewresources, androidm sdk。platform.apiLevel=22-mnc page.image=images/cards/card-api-overview_16-9_2x.png @jd:body
M 開發人員預覽版讓您能夠搶先查看即將發行的 Android 平台版本,這個版本將提供可供使用者和應用程式開發人員使用的新功能。 本文件提供最值得受到矚目的 API 簡介。
M 開發人員預覽版的適用對象是早期採用的開發人員和測試者。 如果您對於如何影響 Android 架構方向深感興趣,請嘗試使用 M 開發人員預覽版,然後將您的意見反應傳送給我們!
注意:請勿將使用 M 開發人員預覽版的應用程式發行到 Google Play 商店。
注意:本文件通常會參考 developer.android.com 上尚未提供可用參考資料的類別和方法。 這些 API 元素在本文件中的格式是 {@code code style} (不含超連結)。 如需這些元素的 API 初稿文件,請下載預覽版參考資料。
如果您先前曾發行過適用於 Android 的應用程式,請注意,您的應用程式會受到平台中的變更所影響。
如需完整資訊,請參閱行為變更。
這個預覽版提供功能更強大的應用程式連結來增強 Android 的意圖系統。此功能讓您能夠將應用程式關聯到您自己的 Web 網域。 根據這個關聯,平台可以判斷要用來處理特定 Web 連結的預設應用程式,並略過提示使用者選取應用程式的程序。如要深入瞭解如何實作此功能,請參閱應用程式連結。
系統現在會針對應用程式執行自動完整資料備份與還原。預設會針對目標為 M 預覽版的應用程式啟用這個行為;您不需要新增任何其他的程式碼。 如果使用者刪除他們的 Google 帳戶,也會同時刪除他們的備份資料。 如要深入瞭解此功能的運作方式以及如何在檔案系統上設定要備份的內容,請參閱針對應用程式進行自動備份。
這個預覽版提供新的 API,讓您能夠在支援的裝置上利用使用者的指紋掃描來驗證他們,並使用裝置解鎖機制 (例如鎖定螢幕密碼) 來檢查距離最後一次驗證該使用者的時間有多接近。 將這些 API 與 Android 金鑰存放區系統搭配使用。
如要透過指紋掃描驗證使用者,請取得新的 {@code android.hardware.fingerprint.FingerprintManager} 類別的執行個體,然後呼叫 {@code FingerprintManager.authenticate()} 方法。您的應用程式必須在配備指紋感應器的相容裝置上執行。 您必須在應用程式上實作適用於指紋驗證流程的使用者介面,並在您的 UI 中使用標準的 Android 指紋圖示。Android 指紋圖示 ({@code c_fp_40px.png}) 隨附於範例應用程式中。如果您正在開發多個使用指紋驗證的應用程式,請注意,每個應用程式都必須個別驗證使用者的指紋。
如要在您的應用程式中使用此功能,請先在您的宣示說明中新增 {@code USE_FINGERPRINT} 權限。
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
如要查看指紋驗證的應用程式實作,請參閱指紋對話方塊範例。
如果您正在測試此功能,請依照下列步驟執行:
adb -e emu finger touch <finger_id>
在 Windows 上,您可能必須執行 {@code telnet 127.0.0.1 <emulator-id>},後面接著 {@code finger touch <finger_id>}。
您的應用程式可以根據使用者最近一次將裝置解鎖的時間有多接近來驗證他們。此功能讓使用者不需記住其他應用程式特定的密碼,並且讓您不需要實作自己的驗證使用者介面。 您的應用程式應該將此功能與公用或秘密金鑰實作搭配使用,來進行使用者驗證。
如要設定在成功驗證使用者之後,同一個金鑰可重複使用的逾時時間長度,可在您設定 {@link javax.crypto.KeyGenerator} 或 {@link java.security.KeyPairGenerator} 時,呼叫新的 {@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()} 方法。 此功能目前適用於對稱式密碼編譯操作。
避免過度顯示重新驗證對話方塊 -- 您的應用程式應該先嘗試使用密碼編譯物件,如果逾時過期,才使用 {@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} 方法在您的應用程式內重新驗證使用者。
如要查看此功能的應用程式實作,請參閱確認認證範例。
這個預覽版提供 API,讓使用者能夠以直覺且快速的方式進行分享。您現在可以定義「直接分享目標」,在您的應用程式中啟動特定的行為。這些直接分享目標是透過 [分享] 選單來向使用者公開。 此功能讓使用者能夠將內容分享到其他應用程式內的目標,例如聯絡人。 例如,直接分享目標可以在其他社交網路應用程式中啟動某個活動,讓使用者能夠在該應用程式中,直接與特定的朋友或社群分享內容。
如要啟用直接分享目標,您必須定義一個類別來擴充
{@code android.service.}
{@code chooser.ChooserTargetService} 類別。在宣示說明中宣告您的
{@code ChooserTargetService}。在該宣告中,指定
{@code BIND_CHOOSER_TARGET_SERVICE} 權限以及含有
{@code SERVICE_INTERFACE} 動作的意圖篩選條件。
下列範例示範如何在您的宣示說明中宣告 {@code 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>
針對您要向 {@code ChooserTargetService} 公開的每個活動,在您的應用程式宣示說明中,新增名稱為 {@code "android.service.chooser.chooser_target_service"} 的 {@code <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,可與語音操作搭配使用,讓您能夠在應用程式內建置交談式語音體驗。 呼叫 {@code android.app.Activity.isVoiceInteraction()} 方法,來判斷是否已啟動您的活動來回應語音操作。 如果是,則您的應用程式可以使用 {@code android.app.VoiceInteractor} 類別,來要求使用者進行語音確認、從選項清單中選取,以及其他更多動作。 如要深入瞭解如何實作語音操作,請參閱語音操作開發人員網站。
這個預覽版提供一種新方式,可透過小幫手吸引使用者來使用您的應用程式。如要使用此功能,使用者必須啟用小幫手來使用目前的內容。 啟用之後,使用者就能夠在所有應用程式內,按住 Home 按鈕不放來啟用小幫手。
您的應用程式可以設定 {@link android.view.WindowManager.LayoutParams#FLAG_SECURE} 旗標,選擇不要與小幫手分享目前的內容。除了平台傳遞給小幫手的一組標準資訊之外,您的應用程式也可以使用新的 {@code android.app.Activity.AssistContent} 類別來分享其他資訊。
如要將您應用程式的其他內容提供給小幫手,請依照下列步驟執行:
這個預覽版新增了下列適用於通知的 API 變更:
這個預覽版提供對於使用者使用藍牙手寫筆進行輸入的改良支援。使用者可以將相容的藍芽手寫筆與他們的手機或平板電腦配對並連線。 連線之後,來自觸控螢幕的位置資訊會與來自手寫筆的壓力和按鈕資訊結合,比起單獨使用觸控螢幕,這樣能夠提供更大範圍的表達方式。 您的應用程式可以藉由在您的活動中註冊新的 {@code View.onStylusButtonPressListener} 和 {@code GestureDetector.OnStylusButtonPressListener} 回呼,來監聽手寫筆按鈕的按下動作,並執行次要動作。
使用 {@link android.view.MotionEvent} 方法和常數來偵測手寫筆按鈕互動:
如果您的應用程式會執行藍芽低電量掃描,就可以使用新的 {@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} 方法,來指定如果先找到符合 {@link android.bluetooth.le.ScanFilter} 組合的廣告封包,以及在某個時段中找不到它時,只需通知回呼。 比起先前平台版本中所提供的功能,這個掃描方法功能更強大且更有效率。
這個預覽版在 Nexus 6 和 Nexus 9 裝置上新增對於無線基地台 2.0 版本 1 規格的支援。如要在您的應用程式中佈建無線基地台 2.0 認證,請使用 {@link android.net.wifi.WifiEnterpriseConfig} 類別的新方法,例如 {@code setPlmn()} 和 {@code setRealm()}。 在 {@link android.net.wifi.WifiConfiguration} 物件中,您可以設定 {@link android.net.wifi.WifiConfiguration#FQDN} 和 {@code providerFriendlyName} 欄位。新的 {@code ScanResult.PasspointNetwork} 屬性指出偵測到的網路是否代表無線基地台 2.0 存取點。
此平台現在允許應用程式能夠要求將在相容硬體中呈現的顯示解析度升級到 4K。 如要查詢目前的實際解析度,請使用新的 {@code android.view.Display.Mode} API。如果 UI 是使用較低的邏輯解析度來繪製,並向上升級為較高的實際解析度,請注意, {@code Display.Mode.getPhysicalWidth()} 方法傳回的實際解析度可能會與 {@link android.view.Display#getSize(android.graphics.Point) getSize()} 報告的邏輯解析度不同。
您可以在應用程式執行時,藉由設定應用程式視窗的 {@code WindowManager.LayoutParams.preferredDisplayModeId} 屬性,來要求系統變更該應用程式中的實際解析度。 如果您想要切換為 4K 顯示解析度,這個功能非常實用。 儘管在 4K 顯示模式中,UI 會持續使用原始解析度 (例如 1080p) 來呈現並向上升級為 4K,但是 {@link android.view.SurfaceView} 物件可能會以原生解析度來顯示內容。
針對執行 M 預覽版的裝置, {@link android.content.res.ColorStateList} 中目前支援設計風格屬性。 {@link android.content.res.Resources#getColorStateList(int) getColorStateList()} 和 {@link android.content.res.Resources#getColor(int) getColor()} 方法已過時。如果您正在呼叫這些 API,請改為呼叫新的 {@code Context.getColorStateList()} 或 {@code Context.getColor()} 方法。 您也可以透過 {@link android.support.v4.content.ContextCompat},在 v4 appcompat 程式庫中取得這些方法。
這個預覽版在 Android 上新增了音訊處理的增強功能,包括:
這個預覽版在影片處理 API 中增加了新功能,包括:
這個預覽版包含下列可用來存取相機閃光燈和相機重新處理影像的 API:
如果相機裝置具有閃光裝置,則您可以呼叫 {@code CameraManager.setTorchMode()} 方法,在不開啟相機裝置的情況下,開啟或關閉閃光裝置的閃光模式。應用程式不具備閃光裝置或相機裝置的獨佔擁有權。 每當相機裝置變成無法使用時,或者,當其他相機資源讓閃光變成無法使用時,閃光模式也會關閉且變成無法使用。 其他應用程式也會呼叫 {@code setTorchMode()} 來關閉閃光模式。關閉最後一個開啟閃光模式的應用程式時,閃光模式即會關閉。
您可以呼叫 {@code CameraManager.registerTorchCallback()} 方法,來註冊回呼要收到有關閃光模式狀態的通知。第一次註冊回呼時,會立即使用所有目前已知具有閃光裝置之相機裝置的閃光模式來呼叫它。 如果成功開啟或關閉閃光模式,即會叫用 {@code CameraManager.TorchCallback.onTorchModeChanged()} 方法。
{@link android.hardware.camera2 Camera2} API 已擴充,支援重新處理 YUV 和私人不透明格式的影像。 您的應用程式會判斷是否可透過 {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES} 使用重新處理功能。 如果裝置支援重新處理,您就可以呼叫 {@code CameraDevice.createReprocessableCaptureSession()} 來建立可重新處理的相機拍攝工作階段,然後建立適用於重新處理輸入緩衝區的要求。
使用 {@code ImageWriter} 類別,將輸入緩衝區流程連接到相機重新處理輸入。 如要取得空的緩衝區,請依照這個程式設計模型執行:
如果您將 {@code ImageWriter} 物件和 {@code android.graphics.ImageFormat.PRIVATE} 影像一起使用,您的應用程式就無法直接存取影像資料。 請改為呼叫 {@code ImageWriter.queueInputImage()} 方法但不含任何緩衝區複本,直接將 {@code ImageFormat.PRIVATE} 影像傳遞到 {@code ImageWriter}。
{@code ImageReader} 類別現在支援 {@code android.graphics.ImageFormat.PRIVATE} 格式的影像串流。 這個支援讓您的應用程式能夠保留 {@code ImageReader} 輸出影像的循環影像佇列、選取一或多個影像,然後將它們傳送到 {@code ImageWriter} 以進行相機重新處理。
這個預覽版包含下列適用於 Android for Work 功能的新 API:
此外,裝置擁有者可以在 Google Play 服務上設定應用程式限制,來指定可用來解除鎖定 FRP 的替代 Google 帳戶,以取代已在裝置上啟用的帳戶。
設定檔或裝置擁有者可以使用 {@code DevicePolicyManager.setPermissionPolicy()},針對所有應用程式的所有執行階段要求設定權限原則,以提示使用者授與一般權限,或者以無訊息方式自動授與或拒絕該權限。 如果設定了後項原則,使用者就無法在應用程式權限畫面的 [設定] 中,修改設定檔或裝置擁有者所做的選項。
如需 M 開發人員預覽版中所有 API 變更的詳細檢視,請參閱 API 差異報告。