Android 4.1 API

API レベル: 16

Android 4.1(JELLY_BEAN) 進化したプラットフォームであり ユーザーエクスペリエンスの向上ですユーザーとアプリ向けの新機能を追加する 開発できます。このドキュメントでは、 いくつかご紹介しました。

アプリ デベロッパーは Android 4.1 を SDK Manager をシステム イメージとして使用し、 Android Emulator と、アプリをビルドできる 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 にアクセスできます。アプリのクラッシュが発生しないよう コンテンツプロバイダが行います別のプラットフォームでコンテンツ プロバイダとやり取りする場合は、 。

ライブ壁紙

ライブ壁紙のプレビュー アクティビティを直接起動できる新しいインテント プロトコル ユーザーはライブ壁紙を簡単に選択でき、ユーザーが画面から離れる必要もありません ホーム画面の壁紙選択ツールを操作します。

ライブ壁紙選択ツールを起動するには、次のコマンドを使用して Intent を指定して startActivity() を呼び出します。 ACTION_CHANGE_LIVE_WALLPAPER とその他 ライブ壁紙 ComponentNameEXTRA_LIVE_WALLPAPER_COMPONENT の文字列として指定します。

アプリスタックのナビゲーション

Android 4.1 では、上へナビゲーションの適切なデザイン パターンの実装が非常に簡単になりました。 ユーザーが行う必要があるのは、android:parentActivityName を各 <activity> 要素に追加することだけです。 追加します。システムはこの情報を使用して、ユーザーが (現在のアクティビティを終了しながら)アクションバーの上ボタンを押した場合。したがって、 アクティビティごとに android:parentActivityName を宣言するため、クリックの処理に onOptionsItemSelected() メソッドは必要ありません。 イベントが発生したときに、システムがそのイベントを処理して、 適切なアクティビティを作成します。

これは、ユーザーがアプリのアクティビティのいずれかを入力するシナリオで特に効果的です 詳細を確認することでたとえば通知からのインテントや、 (アプリ間のナビゲーションの設計ガイドに記載のとおり)。日時 ユーザーがこの方法でアクティビティに入ると、アプリに ユーザーが上に移動したときに再開できるアクティビティです。ただし、アクティビティに android:parentActivityName 属性を指定すると、システムは アプリにすでに親アクティビティのバックスタックが含まれているかどうか。含まれていない場合は、 すべての親アクティビティを含む合成バックスタック。

注: ユーザーがアプリ内で深いアクティビティを開始し、 アプリの新しいタスクが作成されると、システムは実際に親アクティビティのスタックを挿入します タスクに追加します。そのため、[戻る] ボタンを押すと、親のスタック内をさかのぼって移動できます。 できます。

システムがアプリの合成バックスタックを作成すると、基本的な Intent がビルドされ、各親アクティビティの新しいインスタンスを作成します。そのため ユーザーが自然に移動したときの想定どおりに、親アクティビティの保存済み状態を から できます。通常、親アクティビティのいずれかが、依存する UI を表示する場合 コンテキスト情報は欠落しているため、コンテキスト情報が ユーザー 戻ります。たとえば、ユーザーがアルバムを閲覧したり 音楽アプリで上にスワイプすると、選択したアイテムの 指定します。この場合、スタックを作成する必要がある場合は、親に通知する必要があります。 アクティビティに基づいて、現在のアルバムが属するジャンルを指定します。これにより、親は適切なリストを表示できます。 ユーザーが実際にそのアクティビティから移動してきたかどうかがわかります。このような情報を合成された親に提供するため onPrepareNavigateUpTaskStack() メソッドをオーバーライドする必要があります。この TaskStackBuilder オブジェクトが提供されます。このオブジェクトは、 親アクティビティを統合します。TaskStackBuilder には、システムが各親アクティビティの作成に使用する Intent オブジェクトが含まれています。対象: onPrepareNavigateUpTaskStack() の実装では、適切な Intent を次のように変更します。 親アクティビティが適切なコンテキストを判断して表示するために使用できる追加データを追加します。 適切な UI を作成します。

システムが TaskStackBuilder を作成すると、その論理アクティビティに親アクティビティを作成するために使用される Intent オブジェクトが追加されます。 アクティビティ ツリーの最上部から順に並んでいます。したがって、内部配列に追加された最後の Intent が、現在のアクティビティの直接の親になります。条件 アクティビティの親の Intent を変更する場合は、 配列の長さを getIntentCount() で指定し、 値を editIntentAt() に設定します。

アプリの構造がより複雑な場合、そのほかにもいくつかの API があります。 [上へ] ナビゲーションの動作を処理し、 完全にカスタマイズできます。いくつかの API を使用すると、 たとえば

onNavigateUp()
これをオーバーライドして、ユーザーが上ボタンを押したときにカスタム アクションを実行します。
navigateUpTo(Intent)
これを呼び出して現在のアクティビティを終了し、 指定された Intent。アクティビティがバックスタックに存在するが、 が最も近い親でない場合、現在のアクティビティと インテントで指定されたアクティビティも終了します。
getParentActivityIntent()
これを呼び出して、論理を開始する Intent を取得します 現在のアクティビティの親です。
shouldUpRecreateTask(Intent)
これを呼び出して、移動のために合成バックスタックを作成する必要があるかどうかを照会します 選択します。合成スタックを作成する必要がある場合は true を返し、適切なスタックがある場合は false を返します すでに存在します。
finishAffinity()
これを呼び出して、現在のアクティビティと、同じアクティビティを持つすべての親アクティビティを終了します 現在のアクティビティにチェーンされているタスク アフィニティです。 次のように、デフォルトの動作をオーバーライドして、 onNavigateUp() の場合、 [上へ] ナビゲーション時に合成バックスタックを作成します。
onCreateNavigateUpTaskStack
合成タスクスタックの作成方法を完全に制御する必要がある場合は、これをオーバーライドします。バックスタックのインテントにデータを追加するだけの場合は、代わりに onPrepareNavigateUpTaskStack() をオーバーライドする必要があります。

ただし、ほとんどのアプリでこれらの API の使用や onPrepareNavigateUpTaskStack() の実装は必要ありませんが、次の簡単な操作だけで正しい動作を実現できます。 各 <activity> 要素に android:parentActivityName を追加します。

マルチメディア

メディア コーデック

MediaCodec クラスは、エンコード用の低レベルのメディア コーデックへのアクセスを提供します。 デコードします。MediaCodec をインスタンス化するには、createEncoderByType() を呼び出してメディアをエンコードするか、createDecoderByType() を呼び出してメディアをデコードします。これらの メソッドは、エンコードまたはデコードするメディアのタイプに対応する MIME タイプ("video/3gpp""audio/vorbis" など)を受け取ります。

MediaCodec のインスタンスを作成したら、configure() を呼び出して、メディア形式や コンテンツが暗号化されるかどうかがわかります。

メディアをエンコードするかデコードする場合でも、 MediaCodec を作成します。まず getInputBuffers() を呼び出して、入力 ByteBuffer の配列を取得します。 オブジェクトと getOutputBuffers() を使用して出力 ByteBuffer オブジェクトの配列を取得します。

エンコードまたはデコードの準備ができたら、dequeueInputBuffer() を呼び出して、ソースにフィードする際に使用する ByteBuffer のインデックス位置を(入力バッファの配列から)取得します。 できます。ByteBuffer にソースメディアを入力したら、所有権を解放してください queueInputBuffer() を呼び出して、バッファのサイズを 1 つずつ変更できます。

出力バッファの場合と同様に、dequeueOutputBuffer() を呼び出して ByteBuffer のインデックス位置を取得します。 結果が出力されますByteBuffer からの出力を読み取ったら、 releaseOutputBuffer() を呼び出してオーナー権限を解放します。

暗号化されたメディアデータをコーデックで処理するには、queueSecureInputBuffer() を 通常の queueInputBuffer() ではなく、MediaCrypto API を使用します。

コーデックの使用方法について詳しくは、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() を呼び出して、常に利用可能かどうかを確認する必要があります。 サポートしています。

ギャップのない再生

2 つのデバイスの間でギャップレス再生を行えるようになりました MediaPlayer オブジェクト。最初の MediaPlayer の終了前はいつでも、 setNextMediaPlayer() と Android の呼び出し 最初のプレーヤーの停止と同時に 2 番目のプレーヤーの開始を試みます。

メディア ルーター新しい API MediaRouter、MediaRouteActionProvider、MediaRouteButton は、 標準メカニズムと UI です。

カメラ

オート フォーカスの移動

新しいインターフェース Camera.AutoFocusMoveCallback を使用すると、 オートフォーカスの動きが変化します。インターフェースは setAutoFocusMoveCallback() で登録できます。カメラが 連続オートフォーカス モード(FOCUS_MODE_CONTINUOUS_VIDEO または FOCUS_MODE_CONTINUOUS_PICTURE)に通話の着信があります 宛先: onAutoFocusMoving()、 オートフォーカスの動きが始まったかどうかがわかります。

カメラの音

MediaActionSound クラスは、画像を生成するためのシンプルな API セットを提供します。 カメラなどのメディア アクションの標準的な音です。これらの API を使用して、 カスタムの静止画やビデオカメラを作成する際には、適切なサウンドを出力するようにしてください。

サウンドを鳴らすには、MediaActionSound オブジェクトをインスタンス化し、 load() で必要なサウンドをプリロードしてから、 play() を呼び出します。

接続

Android ビーム

Android BeamTM で、Bluetooth を介した大規模なペイロード転送がサポートされるようになりました。データを定義するときは、 新しい setBeamPushUris() で移行 メソッドまたは新しいコールバック インターフェース NfcAdapter.CreateBeamUrisCallback を使用すると、 データ転送を Bluetooth または他の代替トランスポートに 高速転送を実現しますこれは特に、画像やテキストなどの大きなペイロード デバイス間で認識されるペア設定は不要です。インフラストラクチャの Bluetooth 経由の転送を利用する必要があります。

setBeamPushUris() メソッドは、次の配列の配列を受け取ります。 アプリから転送するデータを指定する Uri オブジェクト。 または、NfcAdapter.CreateBeamUrisCallback を実装することもできます。 インターフェース。これは、setBeamPushUrisCallback() を呼び出してアクティビティに指定できます。

コールバック インターフェースを使用すると、インターフェースの createBeamUris() メソッドが ユーザーが Android ビームとの共有を実行するため、共有時に共有する URI を定義できます。 これは、共有する URI が、ユーザー コンテキストによって アクティビティに対して、setBeamPushUris() を呼び出すと、 共有する 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 を使用するには、まず setDnsSdResponseListeners()WifiP2pManager.DnsSdServiceResponseListenerWifiP2pManager.DnsSdTxtRecordListener の両方を受け取ります。Upnp を使用するには、 setUpnpServiceResponseListener(): WifiP2pManager.UpnpServiceResponseListener を受け取ります。

ローカル デバイスでサービスの検出を開始する前に、addServiceRequest() を呼び出す必要もあります。このメソッドに渡す WifiP2pManager.ActionListener が コールバックが成功したら、discoverServices() を呼び出してローカル デバイスでサービスの検出を開始できます。

ローカル サービスが検出されると、WifiP2pManager.DnsSdServiceResponseListener または WifiP2pManager.UpnpServiceResponseListener へのコールバックを受け取ります。これは、 Bonjour または Upnp の使用登録済みいずれの場合も、受信するコールバックには ピアデバイスを表す WifiP2pDevice オブジェクト。

ネットワーク使用状況

新しいメソッド isActiveNetworkMetered() を使用すると、次のことができます。 デバイスが現在従量制ネットワークに接続されているかどうかを確認する。この状態をチェックすることで 負荷の高いネットワーク トランザクションを実行する前に、ユーザーの費用負担を招く可能性があるデータ使用量を管理し、 トランザクションを今すぐ行うか後で行うかについて、情報に基づいた判断を行います(たとえば、 デバイスが Wi-Fi に接続されます)。

ユーザー補助

Accessibility Service API

Android 4.1 では、ユーザー補助サービス API の利用範囲が大幅に拡大しています。今すぐ を使用すると、複雑なジェスチャーなどの入力イベントをモニタリングして応答するサービスを構築できます。 onGesture() などを使用 AccessibilityEvent クラス、AccessibilityNodeInfo クラス、AccessibilityRecord クラスに追加して、入力イベントを管理できます。

ユーザー補助サービスは、ユーザーがクリックする、 performActionsetMovementGranularities を使用したテキストのスクロールとステップ実行。performGlobalAction() メソッド 戻る、ホームに戻る、最近使用したアイテムを開くなどの操作を アプリと通知。

カスタマイズ可能なアプリ ナビゲーション

Android アプリを作成する際に、フォーカス可能な場所を検索してナビゲーション スキームをカスタマイズできるようになりました findFocus()focusSearch() を使用して要素と入力ウィジェットを作成し、フォーカスを設定する setAccessibilityFocused() を使用します。

ウィジェットのユーザー補助機能の強化

新しい android.view.accessibility.AccessibilityNodeProvider クラスを使用すると、次のことができます。 複雑なカスタムビューをユーザー補助サービスに提供し、 アクセスしやすくなる。android.view.accessibility.AccessibilityNodeProvider を使用すると、ユーザーは 高度なコンテンツ(カレンダー グリッドなど)を備えたウィジェットを使用して、 ウィジェットのレイアウト構造から完全に分離されたユーザー補助サービス。このセマンティックは より有用なインタラクション モデルを提示できるため、 視覚障がい者です

コピー&ペースト

インテントでコピー&ペーストする

setClipData() メソッドを使用して、ClipData オブジェクトを Intent に関連付けることができるようになりました。 これは、インテントを使用して複数の content: URI を別のものに転送する場合に特に便利です。 複数のドキュメントを共有するときなどに便利です。指定された content: URI この方法では、インテントのフラグに基づいて読み取りまたは書き込みのアクセス権が与えられるため、アクセス権を付与できます。 インテント内の複数の URI にアクセスすることもできます。ACTION_SEND または ACTION_SEND_MULTIPLE インテントを開始したときに、インテントで提供される URI が 自動的に ClipData に伝播されるため、受信側では 付与されることになります。

HTML と文字列スタイルのサポート

ClipData クラスでスタイル付きテキスト(HTML または Android スタイル付き 文字列)。newHtmlText() を使用すると、HTML スタイルのテキストを ClipData に追加できます。

Renderscript

RenderScript の計算機能が拡張され、次の機能が追加されました。

  • 1 つのスクリプトで複数のカーネルをサポート。
  • 新しいスクリプト API で、コンピューティングからフィルタされたサンプラーを使用した割り当てからの読み取りをサポート rsSample
  • #pragma でのさまざまなレベルの FP 精度のサポート。
  • コンピューティング スクリプトから RS オブジェクトからの追加情報のクエリをサポートします。
  • パフォーマンスが大幅に改善されました。

新しいプラグマを使用して、モデルで必要な浮動小数点精度を定義する レンダリングスクリプトの計算を行えますこれにより、高速なベクトル数学演算などの NEON に似た演算が可能になります。 完全な IEEE 754-2008 標準では不可能な CPU パス上に配置されます。

注: 試験運用版の Renderscript グラフィック エンジンは、 非推奨です。

アニメーション

アクティビティ起動アニメーション

ズーム アニメーションを使用して Activity を起動できるようになりました。 作成できます。必要なアニメーションを指定するには、ActivityOptions API を使用して Bundle を作成します。 トレーニング済みの アクティビティを開始するメソッド(startActivity() など)。

ActivityOptions クラスには、アクティビティごとに アクティビティの起動時に表示したいアニメーションのタイプ:

makeScaleUpAnimation()
指定した開始位置からアクティビティ ウィンドウをスケールアップするアニメーションを作成します。 開始サイズを指定します。たとえば、ホーム画面には Android 4.1 では、アプリの起動時にこれを使用します。
makeThumbnailScaleUpAnimation()
指定した位置から開始してアクティビティ ウィンドウをスケールアップするアニメーションを作成します。 サムネイル画像が表示されます。たとえば、[最近使ったアプリ] ウィンドウに Android 4.1 では、アプリに戻るときにこの方法が使用されます。
makeCustomAnimation()
独自のリソース(アニメーションを定義するリソース)で定義されたアニメーションを作成します。 アクティビティの開きと停止しているアクティビティの 2 種類です。

時刻アニメーター

新しい TimeAnimator は、シンプルなコールバック メカニズムのメカニズムとして TimeAnimator.TimeListener を使用して、 アニメーションのすべてのフレームで注意を喚起します。この Animator には時間、補間、オブジェクト値の設定はありません。リスナーのコールバックは、各フレームに関する情報を受け取ります。 合計経過時間と前のアニメーションフレームからの経過時間を 返すことができます

ユーザー インターフェース

通知

Android 4.1 では、より大きなコンテンツ領域、大きな画像プレビュー、 複数の操作ボタン、設定可能な優先度などです

通知スタイル

新しいメソッド setStyle() を使用すると、 3 つの新しいスタイルのうちの 1 つ。各スタイルはより大きなコンテンツ領域を提供します。宛先 大きなコンテンツ領域のスタイルを指定するには、setStyle() 次のいずれかのオブジェクトを渡します。

Notification.BigPictureStyle
サイズの大きな画像が添付された通知の場合。
Notification.BigTextStyle
1 通のメールなど、多数のテキストを含む通知の場合。
Notification.InboxStyle
複数のメールの抜粋など、文字列のリストを含む通知の場合。
通知の操作

画面下部に表示される最大 2 つの操作ボタンがサポートされ、 通知メッセージ(標準スタイルと大きいスタイルのどちらを通知で使用しているか)

アクション ボタンを追加するには、addAction() を呼び出します。このメソッドは、アイコンのドローアブル リソース、 ボタンのテキスト、アクションを定義する PendingIntent あります

優先事項

これで、通知がどの程度重要であるかをシステムに リスト内の通知の順序を変更するには、 setPriority() で優先度を設定します。マイページ PRIORITY_* 定数で定義された 5 つの優先度レベルのいずれかに合格できます。 Notification クラス内。デフォルトは PRIORITY_DEFAULT で、2 レベル上と 2 レベル下があります。

優先度の高い通知は、ユーザーがすぐに反応することを望んでいるものです。 たとえば新しいインスタント メッセージ、テキスト メッセージ、間近の予定の通知などです。優先度: 低 通知とは、期限切れのカレンダーの予定やアプリのプロモーションなどのことです。

システム 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
アクティビティ レイアウトを、操作したときと同じ画面領域を使用するように設定します SYSTEM_UI_FLAG_FULLSCREEN が有効になっていても、 表示されます。レイアウトの一部分は、元の位置に これは、アプリがシステム UI の非表示と表示を頻繁に行う場合に便利です。 SYSTEM_UI_FLAG_FULLSCREEN: レイアウトが長くなりすぎないように 新しいレイアウト境界に合わせて調整が行われます。
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_FULLSCREENSYSTEM_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 が 説明します。
android.Manifest.permission.READ_USER_DICTIONARY
アプリによるユーザー辞書の読み取りを許可します。これは IME、設定アプリなどの辞書エディタなどです。
READ_CALL_LOG
アプリの情報を含むシステムの通話履歴の読み取りを許可します。 通話の着信と発信を行えます。
WRITE_CALL_LOG
スマートフォンに保存されているシステムの通話履歴を変更することをアプリケーションに許可します
android.Manifest.permission.WRITE_USER_DICTIONARY
アプリがユーザーの単語辞書への書き込みを行えるようにします。

デバイスの機能

Android 4.1 では、Android デバイス専用の ユーザー インターフェースをテレビ画面に表示する FEATURE_TELEVISION。アプリが テレビ インターフェースで使用する場合は、マニフェスト ファイルで <uses-feature> 要素を使用してこの機能を宣言します。

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

この機能は「テレビ」とテレビを見ているような感覚を味わうことができます。 大画面に映し出されており ユーザーは座っていて 入力は D-pad のようなもので、通常はタップや マウス/ポインタ デバイス。