Android 4.1 API

API 級別:16

Android 4.1 (JELLY_BEAN) 是 Android 平台的推陳出新 效能和更優質的使用者體驗。為使用者和應用程式加入新功能 開發人員。本文件將介紹 為應用程式開發人員提供實用的全新 API

Android 4.1 是應用程式開發人員, SDK Manager 做為系統映像檔 會在 Android 模擬器和 SDK 平台上執行,供您建構應用程式。請 請盡快下載系統映像檔和平台,以建構及測試 Android 4.1 上的應用程式。

為了針對搭載 Android 4.1 的裝置進一步最佳化應用程式, 請將 targetSdkVersion 設為 "16",安裝在 Android 4.1 系統映像檔上 ,然後使用這項變更發布更新。

個人中心 可以在 Android 4.1 中使用 API,同時透過新增 條件,在執行前檢查系統 API 級別 minSdkVersion 不支援的 API。 如要進一步瞭解 請參閱建立回溯相容 UI

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

應用程式元件

隔離服務

方法是指定 android:isolatedProcess="true" <service> 標記,您的 Service 將在以下位置執行: 單獨的使用者 ID 程序,不具備專屬權限。

記憶體管理

新的 ComponentCallbacks2 常數 (例如 TRIM_MEMORY_RUNNING_LOWTRIM_MEMORY_RUNNING_CRITICAL) 會提供前景 會展開更多關於 系統呼叫 onLowMemory() 之前的記憶體狀態

新的 getMyMemoryState(ActivityManager.RunningAppProcessInfo) 方法可讓您 擷取一般記憶體狀態

內容供應器

新方法 acquireUnstableContentProviderClient(),可讓您存取可能「不穩定」的 ContentProviderClient您的應用程式不會因為 內容供應器與另一個位置的內容供應器互動時,這項功能非常實用 應用程式。

動態桌布

新增意圖通訊協定,可直接啟動動態桌布預覽活動,方便您 使用者能輕鬆選取動態桌布,不必強制離開 ,然後瀏覽主畫面桌布挑選器。

如要啟動動態桌布挑選器,請使用以下程式碼呼叫 startActivity()IntentACTION_CHANGE_LIVE_WALLPAPER 及額外福利 會將動態桌布 ComponentName 指定為 EXTRA_LIVE_WALLPAPER_COMPONENT 中的字串。

應用程式堆疊導覽

Android 4.1 可讓您更輕鬆地實作正確的設計模式,方便向上導覽。 您只需要將 android:parentActivityName 新增到<activity> 資訊清單檔案當使用者時,系統會使用這項資訊開啟適當的活動。 按一下動作列中的「向上」按鈕 (同時完成目前的活動)。所以 為每個活動宣告 android:parentActivityName,則不需使用 onOptionsItemSelected() 方法處理點擊 動作列應用程式圖示上的事件 — 系統現在會處理該事件,並繼續或 建立適當的活動。

在使用者進入應用程式的任何活動的情況下,這項功能特別實用 經由「詳細介紹」例如透過通知或意圖 不同的應用程式 (如瀏覽應用程式的設計指南所述)。時間 使用者以這種方式進入活動時,您的應用程式可能自然沒有 能夠隨著使用者向上導覽而恢復的活動不過,您為活動提供 android:parentActivityName 屬性時,系統會識別 應用程式是否含有父項活動的返回堆疊,如果不含有父項活動的返回堆疊,則會建構 包含所有父項活動的綜合返回堆疊。

注意:使用者在應用程式中進入深層活動時 系統會為應用程式建立新的任務,然後實際插入父項活動的堆疊 加入任務中因此,按下「返回」按鈕也可以返回父項堆疊。 活動。

系統為應用程式建立合成返回堆疊時,系統會建構基本的 Intent,以為每個父項活動建立新的例項。因此 儲存的父項活動狀態,就像預期使用者操作時一樣 到 每個活動。如果任何父項活動通常顯示了相依的 UI 使用者的上下文就會遺漏這些資訊,而您應該在 使用者 返回堆疊。例如,如果使用者正在查看相簿 如果在音樂應用程式中瀏覽,則瀏覽該活動可能會帶出列出指定專輯中所有專輯的活動清單 音樂類型。在這種情況下,如果必須建立堆疊,您必須告知父項 活動目前屬於哪種類型的活動 這樣家長才能顯示適當的清單 如果使用者確實來自該活動將這類資訊傳送給合成的父項 活動,就必須覆寫 onPrepareNavigateUpTaskStack() 方法。這個 為您提供系統建立的 TaskStackBuilder 物件,藉此 合成父項活動。TaskStackBuilder 包含系統用來建立每個父項活動的 Intent 物件。在您的 onPrepareNavigateUpTaskStack() 實作,您可以修改適當的 Intent, 新增額外資料,上層活動可使用這些資料判斷適當的情境和顯示方式 適當的使用者介面

系統建立 TaskStackBuilder 時,會加入 Intent 物件,用來在其邏輯中建立父項活動 從活動樹狀結構頂端開始排序。因此,最後一個新增至內部陣列的 Intent 就是目前活動的直接父項。如果 如要修改活動父項的 Intent,請先決定 使用 getIntentCount() 傳遞陣列長度 設為 editIntentAt()

如果您的應用程式結構較複雜,還有其他幾種 API 可供使用 可讓您處理向上導覽和 完全自訂合成返回堆疊。部分 API 可讓您 控制組包括:

onNavigateUp()
覆寫這個屬性即可在使用者按下「向上」按鈕時執行自訂動作。
navigateUpTo(Intent)
呼叫此方法即可完成目前活動,並前往 您先前已提供 Intent。如果該活動存在於返回堆疊中 不是最接近的父項,而是目前活動與 使用意圖指定的活動也都會完成。
getParentActivityIntent()
呼叫此方法即可取得啟動邏輯的 Intent 目前活動的父項。
shouldUpRecreateTask(Intent)
如要進行導覽,請呼叫這個方法,以便查詢是否需要建立合成返回堆疊 上。如果必須建立合成堆疊,則傳回 true;如果適當的堆疊是 false,則傳回 false 已存在。
finishAffinity()
呼叫這個方法以完成目前活動和所有父項活動相同 鏈結至目前活動的工作相依性。 如果您覆寫預設行為,例如 onNavigateUp(),您應在符合下列條件時呼叫這個方法: 在「向上導覽」時建立合成返回堆疊。
onCreateNavigateUpTaskStack
如需完整控管綜合工作堆疊的建立方式,請覆寫這項設定。如果您只想將一些額外資料新增至返回堆疊的意圖,請改為覆寫 onPrepareNavigateUpTaskStack()

不過,大多數應用程式不需要使用這些 API 或實作 onPrepareNavigateUpTaskStack(),但只要簡單做法是 為每個 <activity> 元素新增 android:parentActivityName

多媒體

媒體轉碼器

MediaCodec 類別提供低階媒體轉碼器的編碼存取權 以及解碼媒體檔案您可以呼叫 createEncoderByType() 對媒體進行編碼,藉此將 MediaCodec 例項化,或是呼叫 createDecoderByType() 來解碼媒體。每個 方法會針對要編碼或解碼的媒體類型 (例如 "video/3gpp""audio/vorbis") 採用 MIME 類型。

建立 MediaCodec 例項後,您可以呼叫 configure() 以指定媒體格式或 是否經過加密

無論您是對媒體進行編碼或解碼 建立 MediaCodec。請先呼叫 getInputBuffers() 以取得輸入 ByteBuffer 的陣列 物件和 getOutputBuffers() 來取得輸出 ByteBuffer 物件的陣列。

準備好編碼或解碼時,請呼叫 dequeueInputBuffer() 以取得 ByteBuffer (來自輸入緩衝區的陣列) 的索引位置,而您要用於傳入來源中。 媒體。將來源媒體填入 ByteBuffer 後,請釋出擁有權 ,方法是呼叫 queueInputBuffer()

同樣地,如果是輸出緩衝區,請呼叫 dequeueOutputBuffer() 以取得 ByteBuffer 的索引位置 用來接收測試結果讀取 ByteBuffer 的輸出內容後, 呼叫 releaseOutputBuffer() 即可釋出擁有權。

如要處理轉碼器中的加密媒體資料,請搭配使用 queueSecureInputBuffer() MediaCrypto API,而非一般的 queueInputBuffer()

如要進一步瞭解如何使用轉碼器,請參閱 MediaCodec 說明文件。

使用提示時錄音

新方法 startRecording() 允許 您必須先根據 MediaSyncEvent 定義的提示開始錄音。 MediaSyncEvent 會指定音訊工作階段 (例如 MediaPlayer 定義的事件),完成後就會觸發 開始錄音。例如,您可以使用這項功能 播放一段提示音,指出錄音作業開始和錄音 因此你不必手動同步色調 。

有時間碼的文字軌

MediaPlayer 現在會同時處理頻內外文字軌。 頻內文字軌在 MP4 或 3GPP 媒體來源中以文字音軌的形式呈現。架構外文字 可透過 addTimedTextSource() 方法,將音軌新增為外部文字來源。在所有外部文字之後 已新增追蹤來源,必須呼叫 getTrackInfo() 才能取得 資料來源中的可用曲目

如要將音軌設為與 MediaPlayer 搭配使用,您必須 使用索引呼叫 selectTrack() 您要使用的音軌位置

如要在文字軌可供播放時收到通知,請導入 MediaPlayer.OnTimedTextListener 介面和傳遞 至 setOnTimedTextListener()

音效

AudioEffect 類別現在支援其他音訊 預先處理類型:

  • 隨附「AcousticEchoCanceler」的聲學降噪 (AEC) 功能 從擷取的音訊信號中移除遠端方訊號的貢獻。
  • 使用 AutomaticGainControl 自動增益控制 (AGC) 自動將擷取的訊號輸出結果正規化。
  • 使用NoiseSuppressor的雜訊抑制器 (NS) 從擷取的訊號中移除背景噪音。

您可以使用任一個 AudioEffect,對使用 AudioRecord 擷取的音訊套用這些預先處理器效果 子類別

注意:我們不保證所有裝置都支援這些規格 因此,請一律先呼叫 isAvailable(),檢查相對應的 以及音訊效果類別

不間斷播放

現在可以在兩個不同的 MediaPlayer 物件。在前 MediaPlayer 完成之前,你隨時可以上傳 呼叫 setNextMediaPlayer() 和 Android 會嘗試在第一個玩家停止時啟動第二個玩家。

媒體路由器。新推出的 API MediaRouter、MediaRouteActionProvider 和 MediaRouteButton 用於選擇媒體播放位置的標準機制和 UI

相機

自動對焦移動

新版介面 Camera.AutoFocusMoveCallback 可讓您聆聽 查看自動對焦移動的變化您可以透過 setAutoFocusMoveCallback() 註冊介面。然後當相機拍攝時 處於連續自動對焦模式 (FOCUS_MODE_CONTINUOUS_VIDEOFOCUS_MODE_CONTINUOUS_PICTURE),你就會接到來電 目的地:onAutoFocusMoving(), 讓您知道自動對焦已經開始移動還是已停止移動。

相機音效

MediaActionSound 類別提供一組簡易的 API 來產生 相機或其他媒體動作產生的標準音效您應使用這些 API 打造專屬的靜態影像或攝影機

如要播放音效,只要將 MediaActionSound 物件例項化即可,請呼叫 load():預先載入想要的音效,然後 在適當時機呼叫 play()

連線能力

Android Beam

Android BeamTM 現可支援透過藍牙進行大型酬載傳輸。定義資料時 以使用新的 setBeamPushUris() 進行轉移 方法或新的回呼介面 NfcAdapter.CreateBeamUrisCallback、Android 將資料傳輸到藍牙或其他替代傳輸方式。 但轉移速度更快這項功能特別適合用於大型酬載 音訊檔,且裝置之間完全不需要配對。自從 並能善用藍牙傳輸功能。

setBeamPushUris() 方法會採用 Uri 物件,用於指定要從應用程式轉移的資料。 或者,您也可以實作 NfcAdapter.CreateBeamUrisCallback 介面,您可以呼叫 setBeamPushUrisCallback() 為活動指定這個介面。

使用 回呼介面後,系統會在發生此情況時,呼叫介面的 createBeamUris() 方法 使用者透過 Android Beam 執行共用,因此您可以定義要在分享時間共用的 URI。 如果要共用的 URI 可能因使用者脈絡而異 活動,但呼叫 setBeamPushUris() 為 當要共用的 URI 保持不變時很實用,而您可以事先安全地定義這些 URI。

網路服務搜尋

Android 4.1 版開始支援多點傳送 DNS 服務探索功能,可讓你 尋找並連結對等互連裝置透過 Wi-Fi 提供的服務,例如行動裝置 在本機網路中註冊的印表機、攝影機、媒體播放器等。

新套件 android.net.nsd 包含新的 API,可讓您 透過區域網路廣播您的服務、探索網路上的本機裝置,以及 連線至裝置。

如要註冊服務,您必須先建立 NsdServiceInfo 物件,並使用方法定義服務的各種屬性,例如: setServiceName(), setServiceType()setPort()

接著,您需要導入 NsdManager.RegistrationListener 並傳遞至 registerService() 並提供您的 NsdServiceInfo

如要在網路上探索服務,請實作 NsdManager.DiscoveryListener 並傳遞至 discoverServices()

NsdManager.DiscoveryListener 收到服務相關回呼的時間 已找到,您需要呼叫 resolveService(),然後向其傳送 實作接收的 NsdManager.ResolveListener NsdServiceInfo 物件,其中包含 並啟動連線

Wi-Fi P2P 服務搜尋

Android 4.1 已強化 Wi-Fi P2P API,以便支援在 WifiP2pManager。方便你探索及篩選附近的地點 裝置會先透過 Wi-Fi P2P 連線,然後再連線至某個裝置;網路服務 探索功能可讓你在現有的連線網路 (例如區域 Wi-Fi) 上探索服務 網路)。

透過 Wi-Fi 以服務形式廣播您的應用程式,讓其他裝置可以偵測到 您的應用程式並進行連結,呼叫 addLocalService() 及 用於描述應用程式服務的 WifiP2pServiceInfo 物件。

如要啟動透過 Wi-Fi 探索鄰近裝置的功能,您必須先決定 透過 Bonjour 或 Upnp 進行通訊如要使用 Bonjour,請先設定幾個 setDnsSdResponseListeners():可接受 WifiP2pManager.DnsSdServiceResponseListenerWifiP2pManager.DnsSdTxtRecordListener。如要使用 Upnp,請呼叫 setUpnpServiceResponseListener(),採用 WifiP2pManager.UpnpServiceResponseListener

你還需要呼叫 addServiceRequest(),才能開始在本機裝置上探索服務。您傳遞至這個方法的 WifiP2pManager.ActionListener 收到 成功回呼,然後您就可以透過呼叫 discoverServices() 開始在本機裝置上探索服務。

找到本機服務後,您就會收到對 WifiP2pManager.DnsSdServiceResponseListenerWifiP2pManager.UpnpServiceResponseListener 的回呼,取決於您 現已註冊使用 Bonjour 或 Upnp。不論是哪一種情況,您都能收到的回呼都包含 代表對等互連裝置的 WifiP2pDevice 物件。

網路用量

新方法 isActiveNetworkMetered() 可讓您 檢查裝置目前是否連上計量付費網路。確認狀態 執行大量網路交易之前,建議您先管理使用者可能會產生費用的資料用量,以便他們支付相關費用。 做出明智的決策,例如立即或之後進行交易 (例如 裝置會連上 Wi-Fi)。

無障礙設定

無障礙服務 API

在 Android 4.1 中,無障礙服務 API 的觸及範圍大幅增加。現在 可讓您建構監控及回應更多輸入事件的服務,例如複雜的手勢 使用onGesture()和其他 透過附加 AccessibilityEventAccessibilityNodeInfoAccessibilityRecord 類別來處理輸入事件。

無障礙服務也可以代表使用者執行各種操作,包括點擊、 使用 performActionsetMovementGranularities 捲動及逐步閱讀文字。performGlobalAction() 方法 也能讓服務執行返回、主畫面和開啟最近操作等動作 應用程式及通知。

可自訂的應用程式導覽

建構 Android 應用程式時,您現在可以找出可聚焦的焦點,藉此自訂導覽配置 使用 findFocus()focusSearch() 的元素和輸入小工具,以及設定焦點 使用 setAccessibilityFocused()

更實用的小工具

新的 android.view.accessibility.AccessibilityNodeProvider 類別可讓您 為無障礙服務顯示複雜的自訂檢視畫面,方便這類服務透過 提供更便捷的無障礙服務android.view.accessibility.AccessibilityNodeProvider 可讓使用者 提供進階內容 (例如日曆檢視) 的小工具,以便呈現 完全獨立於小工具版面配置結構的無障礙服務。這個語意 可讓無障礙服務提供更實用的互動模型, 視障者

複製及貼上

使用意圖複製及貼上

您現在可以使用 setClipData() 方法,將 ClipData 物件與 Intent 建立關聯。 使用意圖將多個 content: URI 轉移到另一個 URI 時,這項功能特別實用 例如共用多份文件時提供的 content: URI 這麼做也能尊重意圖的旗標提供讀取或寫入權限 在意圖中存取多個 URI。啟動 ACTION_SENDACTION_SEND_MULTIPLE 意圖時,意圖中提供的 URI 現在 會自動套用至 ClipData,讓接收端可 相關存取權

支援 HTML 和字串樣式

ClipData 類別現在支援樣式文字 (可以是 HTML 或 Android 樣式 字串)。您可以使用 newHtmlText()ClipData 中新增 HTML 樣式的文字。

RenderScript

強化了 Renderscript 運算功能,並包含下列功能:

  • 在單一指令碼中支援多個核心。
  • 在新指令碼 API 中,使用經過篩選的取樣器從運算中讀取配置 rsSample
  • #pragma 中支援不同層級的 FP 精確度。
  • 支援從運算指令碼查詢 RS 物件的其他資訊。
  • 多項效能改善。

現有的 pragma 也可用於定義 則是運算 Renderscripts如此一來,您就能啟用 NEON 等作業,例如快速向量數學運算 執行 IEEE 754-2008 標準無法連線的 CPU 路徑。

注意:實驗性 Renderscript 圖形引擎現已 已淘汰。

動畫

活動啟動動畫

您現在可以Activity使用縮放動畫或 以及其中加入的自訂動畫如要指定想要的動畫,請使用 ActivityOptions API 建構 Bundle,您可以 然後將傳送給 啟動活動的方法,例如 startActivity()

ActivityOptions 類別為每個類別提供不同的方法 建議在活動開啟時顯示的動畫類型:

makeScaleUpAnimation()
建立可從指定起始處放大活動視窗的動畫 以及指定的起始大小例如, Android 4.1 會在開啟應用程式時使用。
makeThumbnailScaleUpAnimation()
建立可從指定開始放大活動視窗的動畫 並提供縮圖。舉例來說,在「最近使用的應用程式」視窗中 Android 4.1 會在返回應用程式時使用。
makeCustomAnimation()
建立由自己的資源定義的動畫:定義動畫 另一個則是停止的活動

時間動畫工具

新的 TimeAnimator 提供簡單的回呼 機制,並透過 TimeAnimator.TimeListener 傳送通知 影格速率指標這個 Animator 沒有設定時間長度、內插或物件價值的設定。事件監聽器的回呼會接收每個影格的資訊,包括 總經過時間,以及自上一個動畫影格以來的經過時間。

使用者介面

通知

在 Android 4.1 中,您可以建立具有較大內容區域的通知、大型圖片預覽、 多個動作按鈕,以及可設定的優先順序。

通知的樣式

新方法 setStyle() 可讓您指定 適用於通知的三種新樣式之一,每個通知提供更大的內容區域。目的地: 指定大型內容區域的樣式,請傳遞下列其中一個物件 setStyle()

Notification.BigPictureStyle
適用於含有大型圖片附件的通知。
Notification.BigTextStyle
適用於包含大量文字的通知,例如單一電子郵件。
Notification.InboxStyle
含有字串清單的通知,例如多封電子郵件的內容片段。
通知動作

系統現在支援底部最多顯示的兩個動作按鈕 通知訊息,無論通知使用的是一般樣式還是大型樣式。

如要新增動作按鈕,請呼叫 addAction()。這個方法使用三個引數:圖示的可繪製資源。 按鈕文字和定義動作的 PendingIntent 自 2022 年起

優先順序

您現在可以提示系統通知對 設定通知的順序 具有 setPriority() 的優先順序個人中心 可以在 PRIORITY_* 常數定義的五種不同優先順序等級中擇一傳遞 在 Notification 類別中。預設值為 PRIORITY_DEFAULT,但有兩個等級較高及較低層級。

高優先順序通知是指使用者通常希望迅速回應的問題 例如新的即時訊息、簡訊或即將開始的活動提醒。低優先順序 通知是指過期的日曆活動或應用程式宣傳訊息。

系統 UI 控制項

Android 4.0 (Ice Cream Sandwich) 新增了標記,用於控管系統 UI 的顯示設定 元素,例如調暗系統資訊列外觀,或讓手機完全消失。 Android 4.1 新增了幾個旗標,讓您進一步控制系統外觀 呼叫 setSystemUiVisibility() 即可看到 UI 元素,以及與這些元素的關係 並傳遞下列標記:

SYSTEM_UI_FLAG_FULLSCREEN
隱藏不重要的系統 UI (例如狀態列)。 如果您的活動在重疊模式中使用動作列 ( 啟用 android:windowActionBarOverlay),則這個標記也會隱藏動作列,並 因此,在隱藏和顯示兩者時,使用協調動畫。
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
將活動版面配置設為使用你離開時的可用畫面區域 即使系統 UI 元素仍啟用 SYSTEM_UI_FLAG_FULLSCREEN 仍可以看到。雖然版面配置的某些部分會覆蓋在 如果應用程式經常透過 SYSTEM_UI_FLAG_FULLSCREEN,因為這能避免您的版面配置 每當系統 UI 隱藏或顯示時,就會配合新的版面配置邊界進行調整。
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
將活動版面配置設為使用你離開時的可用畫面區域 啟用 SYSTEM_UI_FLAG_HIDE_NAVIGATION (已在 Android 4.0 中新增) (即使仍看到系統 UI 元素)雖然版面配置的其中一部分 疊加於 導覽列就能派上用場 使用 SYSTEM_UI_FLAG_HIDE_NAVIGATION,因為這樣可避免版面配置 每次在隱藏或顯示導覽列時,配合新的版面配置邊界進行調整。
SYSTEM_UI_FLAG_LAYOUT_STABLE
如果你使用 SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 和/或 SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION,建議加入這個標記,確保你能撥打電話 可以看到 fitSystemWindows() 的 定義的邊界會保持與可用的螢幕空間一致。 也就是說,設定此標記後,fitSystemWindows() 會視為未變更系統 UI 元素的顯示行為 甚至在隱藏所有系統使用者介面後

如要進一步討論其他相關的系統 UI 標記,請參閱 Android 4.0 中新增的應用程式。

遠端檢視畫面

GridLayout」和「ViewStub」 現已支援可切換的檢視畫面,方便您在版面配置中 應用程式小工具和通知自訂版面配置。

字型系列

Android 4.1 又新增了幾個 Roboto 字型樣式變化版本,總共 10 個變化版本。 而且這些都可以透過應用程式使用現在,您的應用程式可以充分利用 精簡變體。

以下為可用的 Roboto 字型完整變化版本:

  • 一般內容
  • 斜體
  • 粗體
  • 粗體
  • 淺色
  • 淺斜體
  • 緊縮 (標準)
  • 斜體斜體
  • 濃縮粗體
  • 精簡粗斜體

您可以使用新的 fontFamily 套用任一種註解 屬性與 textStyle 屬性搭配使用

支援的 fontFamily 值如下:

  • "sans-serif":一般 Roboto
  • "sans-serif-light" 代表 Roboto Light
  • "sans-serif-condensed" 適用於 Roboto Condensed

接著,您可以使用 textStyle 值套用粗體和/或斜體 "bold""italic"。您可以按照以下方式同時套用兩者:android:textStyle="bold|italic"

您也可以使用 Typeface.create()。 例如 Typeface.create("sans-serif-light", Typeface.NORMAL)

輸入架構

多個輸入裝置

新的 InputManager 類別可讓您查詢 一組輸入裝置目前已連線,註冊後即可收到新裝置通知 會在何時新增、變更或移除如要建構遊戲,這項功能特別實用 支援多位玩家,並希望偵測 以及控制器數量出現變化時

您可以呼叫以下應用程式,查詢已連線的所有輸入裝置: getInputDeviceIds()。這會傳回 整數陣列,每個陣列中都是不同輸入裝置的 ID。接著,您可以撥打 待購 getInputDevice() 特定輸入裝置 ID 的 InputDevice

如果您想在新的輸入裝置連線、變更或中斷連線時收到通知, 請實作 InputManager.InputDeviceListener 介面,並 向 registerInputDeviceListener() 註冊。

輸入控制器震動

如果連接的輸入裝置具有專屬的震動功能,你現在就可以控制 只需使用現有的 Vibrator API 就能瞭解這些裝置的震動 在 InputDevice 上呼叫 getVibrator()

權限

以下是新權限:

READ_EXTERNAL_STORAGE
提供受保護外部儲存空間的讀取權限。Android 4.1: 預設所有應用程式仍具備讀取權限 資源存取權這項規定將在日後推出的版本中變更,以要求應用程式明確要求 讀取權限。如果您的應用程式已經要求寫入權限, 也會自動取得讀取權限新的開發人員選項可啟用讀取權限 則可讓開發人員測試應用程式,根據
android.Manifest.permission.READ_USER_DICTIONARY
允許應用程式讀取使用者字典。這個 或是字典編輯器,例如「設定」應用程式。
READ_CALL_LOG
允許應用程式讀取系統通話記錄,其中含有下列資訊 。
WRITE_CALL_LOG
允許應用程式修改手機中儲存的系統通話記錄
android.Manifest.permission.WRITE_USER_DICTIONARY
允許應用程式寫入使用者的字詞字典。

裝置功能

Android 4.1 版針對專屬裝置推出新功能聲明 如何在電視螢幕上顯示使用者介面:FEATURE_TELEVISION。如要宣告應用程式需要 電視介面,請使用 <uses-feature> 元素,在資訊清單檔案中宣告這項功能:

<manifest ... >
    <uses-feature android:name="android.hardware.type.television"
                  android:required="true" />
    ...
</manifest>

這項功能定義了「電視」是一般客廳電視體驗: 顯示在大螢幕上,使用者坐著距離其他 就像 D-Pad 一樣,通常不會透過觸控或 滑鼠/指標裝置。