Android 4.0 API

API レベル: 14

Android 4.0(ICE_CREAM_SANDWICH) ユーザーとアプリのためにさまざまな新機能を追加する、メジャー プラットフォーム リリースです 開発できます。以下で説明するすべての新機能と API に加えて、Android 4.0 は重要な Android 3.x の広範な API とホログラフィック テーマを使用できるため、 対応できますアプリ デベロッパーは単一のプラットフォームと統合型 API フレームワークを手にすることが可能 これを使用すると、単一の APK でアプリケーションを開発、公開できます。 スマートフォンやタブレットなどのユーザー エクスペリエンスが、同じバージョンの Android - Android 4.0(API レベル 14)以降。

デベロッパー向け Android 4.0 プラットフォームは、 コンポーネントをダウンロードします。このダウンロード可能なプラットフォームには Android ライブラリとシステム イメージ、エミュレータ スキンのセットと、 できます。Android 4.0 に対する開発やテストを開始するには、 Android SDK Manager を使用して、SDK にプラットフォームをダウンロードします。

API の概要

以下のセクションでは、Android 4.0 の新しい API の技術的概要について説明します。

連絡先プロバイダのソーシャル API

ContactsContract プロバイダで定義された連絡先 API は次のとおりです。 新しいソーシャル向け機能(デバイス所有者の個人用プロファイルや ブラウザにインストールされているソーシャル ネットワークにユーザーが個人の連絡先を招待できる ダウンロードします

ユーザー プロフィール

Android には、デバイス所有者を表す個人用プロファイルが追加されました。これは ContactsContract.Profile テーブル。ユーザー ID を維持するソーシャル アプリ ContactsContract.Profile 内に新しい ContactsContract.RawContacts エントリを作成して、ユーザーのプロフィール データに提供できます。つまり、デバイス ユーザーを表す未加工連絡先は、 ContactsContract.RawContacts URI で定義された従来の未加工連絡先テーブルに属さない。代わりに、プロフィールの未加工連絡先を CONTENT_RAW_CONTACTS_URI のテーブルにあります。未加工 この表の連絡先が、「自分」というラベルの付いた 1 つのユーザー表示プロファイルに集約されます。

プロファイルに新しい未加工連絡先を追加するには、 android.Manifest.permission#WRITE_PROFILE 権限が必要です。同様に、プロファイルから読み取るには android.Manifest.permission#READ_PROFILE 権限をリクエストする必要があります。ただし、 ほとんどのアプリは、ユーザー プロファイルの読み取りを不要にすべきです。たとえデータが 選択します。ユーザー プロフィールの読み取りは機密情報に関わる権限であり、ユーザーのプライバシーに配慮する必要があります。 要求するアプリに懐疑的です。

招待インテント

インテントのアクション INVITE_CONTACT でアプリが許可される ユーザーが、連絡先をソーシャル ネットワークに追加したいことを示すアクションを呼び出すことができます。アプリ アプリを受信すると、そのアプリを使用して、指定した連絡先をそのアプリに招待します。 できます。ほとんどのアプリは、このオペレーションの受信側になります。たとえば、 組み込みの People アプリは、ユーザーが [Add connection] を選択すると招待インテントを呼び出します。特定の ソーシャル アプリです。

[Add connection] でアプリケーションを公開するにはアプリは同期アダプターを提供し、 ソーシャル ネットワークの連絡先情報を同期します。そのうえでシステムに対して INVITE_CONTACT インテントに応答する アプリの同期構成ファイルに inviteContactActivity 属性を追加し、 招待インテントの送信時にシステムが開始するアクティビティの完全修飾名。 起動するアクティビティは、インテントの 必要な作業を実行して、その連絡先をネットワークに招待したり、 通信できます。

サイズの大きい写真

Android で、連絡先の高解像度写真がサポートされるようになりました。これで、写真を 連絡先レコードがあると、システムはそれを(以前と同じように)96x96 のサムネイルと 256x256 "表示写真"新しいファイルベースのフォトストア( 今後変わる可能性があります)。連絡先にサイズの大きい写真を追加するには、 通常の PHOTO 列に データ行が処理され、それに基づいて適切なサムネイルと表示写真が生成されます。 レコード

連絡先の使用状況に関するフィードバック

新しい ContactsContract.DataUsageFeedback API を使用すると、 ユーザーが特定の連絡手段を使用した頻度 取得しようと試みます。この情報は、各連絡先のランキングの改善に役立ちます 連絡方法を提案し、それぞれの人に連絡を取る方法を提案します。

カレンダー プロバイダ

新しい Calendar API を使用すると、カレンダー、予定、参加者、カレンダー、イベントの読み取り、追加、変更、削除が リマインダーとアラート(Calendar Provider に保存されているもの)

さまざまなアプリやウィジェットで、これらの API を使ってカレンダーの予定の読み取りや変更ができます。ただし、 最も説得力のあるユースケースとして、ユーザーのカレンダーを Google Workspace の 他のカレンダー サービスと統合し、すべてのカレンダー サービスを 1 か所で できます。たとえば、Google カレンダーの予定は、 Google Calendar Sync Adapter を使用すると、これらの予定を Android の カレンダー アプリ。

カレンダー プロバイダでのカレンダーと予定関連情報のデータモデルは次のとおりです。 CalendarContract で定義されます。ユーザーのカレンダー データはすべて CalendarContract のさまざまなサブクラスで定義されたテーブルの数:

  • CalendarContract.Calendars テーブルには、カレンダー固有のテーブルが 情報です。このテーブルの各行には、1 つのカレンダーの詳細情報(名前、 色、同期情報などがあります
  • CalendarContract.Events テーブルは、イベント固有の情報を保持します。 このテーブルの各行には、1 つのイベントに関する情報が イベントのタイトル、場所、開始時間、終了時間などがあります。イベントは 1 回限りまたは繰り返し発生することができます 複数回失敗します。参加者、リマインダー、拡張プロパティは別々のテーブルに保存され、 イベントの _ID を使用してイベントにリンクします。
  • CalendarContract.Instances テーブルは、開始時間と終了時間を保持します。 アラートを発しますこのテーブルの各行は、1 つのオカレンスを表しています。1 回限りのイベントの場合 インスタンスとイベントの 1 対 1 のマッピングがあります。定期的な予定の場合は、複数の行が 自動的に生成されます。
  • CalendarContract.Attendees テーブルにはイベントの参加者またはゲストが保持されます。 情報です。各行は、予定の 1 人のゲストを表します。招待するゲストの種類と、 イベントに対するその人の回答も確認できます。
  • CalendarContract.Reminders テーブルは、アラート/通知データを保持します。 各行は、1 つのイベントに対する 1 つのアラートを表します。1 つの予定に複数のリマインダーを設定できます。商品数 イベントごとのリマインダーは、MAX_REMINDERS で指定されます。これは、同期アダプターによって設定されます。 指定されたカレンダーのオーナーになります。リマインダーは、イベント開始までの時間を分単位で指定します。 アラート、メール、SMS などを使用してアラーム方法を指定します。 できます。
  • CalendarContract.ExtendedProperties テーブルは不透明なデータ フィールドを保持する 使用しないでください。プロバイダは、削除する以外、このテーブルのアイテムに対してアクションを実行しません。 関連する予定が削除されたときに 通知を受け取るようにできます

カレンダー プロバイダを使用してユーザーのカレンダー データにアクセスするには、アプリケーションで READ_CALENDAR 権限(読み取りアクセス用) WRITE_CALENDAR(書き込みアクセスの場合)。

イベント インテント

ユーザーのカレンダーにイベントを追加するだけの場合は、Events.CONTENT_URI で定義したデータで ACTION_INSERT インテントを使用して、 アクティビティを新規作成します。このインテントを使用する際、 また、以下のエクストラを使用して予定の詳細を指定できます。

ボイスメール プロバイダ

新しいボイスメール プロバイダを使用すると、アプリケーションでボイスメールを ユーザーのすべてのボイスメールを 1 つのビジュアル プレゼンテーションに表示できます。たとえば 1 人のユーザーが 1 つは電話のサービス プロバイダから、もう 1 つは VoIP またはその他の代替音声から 提供します。これらのアプリでは、Voicemail Provider API を使用してボイスメールをデバイスに追加できます。「 組み込みの電話アプリで、すべてのボイスメールが統合プレゼンテーションでユーザーに提示されます。 すべてのボイスメールを読み取れるのはシステムの電話アプリケーションだけですが、 ボイスメールを提供する各アプリケーションは、システムに追加したものを読み取ることができます(ただし、 他のサービスからのボイスメールの読み取り)。

現在 API では、サードパーティ製アプリが Gmail からのボイスメールを一切読み取れないため、 ボイスメール API を使用する必要があるサードパーティ アプリは、ボイスメールに対応しているアプリのみです。 ユーザーに配信する必要があります

VoicemailContract クラスは、コンテンツ プロバイダを定義します。 ボイスメール プロバイダ。サブクラス VoicemailContract.VoicemailsVoicemailContract.Status は、アプリが以下の操作を行うためのテーブルを提供します。 デバイスに保存するボイスメール データを挿入します。ボイスメール プロバイダ アプリの例については、 ボイスメール プロバイダ デモ

マルチメディア

Android 4.0 では、写真 動画、音楽。

メディア エフェクト

新しいメディア エフェクト フレームワークでは、画像や画像にさまざまな視覚効果を適用できます。 できます。たとえば、画像エフェクトを使用すると、赤目を修正したり、画像をグレースケールに変換したり、 明るさの調整、彩度の調整、画像の回転、魚眼効果の適用などを行えます。「 パフォーマンスを最大化するために、GPU ですべてのエフェクト処理が実行されます。

パフォーマンスを最大化するために、エフェクトは OpenGL テクスチャに直接適用されるため、アプリケーションは エフェクト API を使用するには、有効な OpenGL コンテキストが必要です。適用するテクスチャ ビットマップ、動画、さらにはカメラの効果もあります。ただし、使用できる一定の制限が テクスチャは次の条件を満たす必要があります。

  1. GL_TEXTURE_2D テクスチャ画像にバインドする必要があります。
  2. 少なくとも 1 つの mipmap レベルが含まれている必要があります。

Effect オブジェクトでは、適用可能な単一のメディア エフェクトを定義します。 作成します。Effect を作成する基本的なワークフローは次のとおりです。

  1. OpenGL ES 2.0 コンテキストから EffectContext.createWithCurrentGlContext() を呼び出します。
  2. 返された EffectContext を使用して EffectContext.getFactory() を呼び出します。これにより、インスタンスが返されます。 /EffectFactory
  3. createEffect() を呼び出し、 @link android.media.effect.EffectFactory} のエフェクト名(EFFECT_FISHEYEEFFECT_VIGNETTE など)。

エフェクトのパラメータを調整するには、setParameter() を呼び出してパラメータ名とパラメータ値を渡します。各タイプのエフェクトで受け入れられるものは、 パラメーターがあります。パラメーターについては、エフェクト名とともに説明されています。たとえば、EFFECT_FISHEYE には、scale あります。

テクスチャに効果を適用するには、apply() Effect に渡して、入力テクスチャ、幅と高さ、出力 テクスチャです。入力テクスチャは GL_TEXTURE_2D テクスチャにバインドする必要があります image(通常は glTexImage2D() 関数を使用)。複数の mipmap レベルを指定できます。出力テクスチャが テクスチャ画像の場合は、効果によって GL_TEXTURE_2D として自動的にバインドされ、1 つの mipmap レベル(0)が適用されます。 指定します。

EffectFactory にリストされているエフェクトはすべて、サポートが保証されています。 ただし、外部ライブラリから入手できる一部の追加エフェクトは、一部のデバイスでサポートされていません。 そのため、まず、 isEffectSupported()

リモコン クライアント

新しい RemoteControlClient を使用すると、メディア プレーヤーの再生を有効にできます。 デバイスのロック画面など、リモート コントロール クライアントからコントロールできます。メディアプレーヤーでは リモコンで現在再生中のメディアに関する情報(曲のトラックなど) 情報、アルバムアート

メディア プレーヤーのリモート コントロール クライアントを有効にするには、コンストラクタで RemoteControlClient をインスタンス化し、ACTION_MEDIA_BUTTON をブロードキャストする PendingIntent を渡します。また、インテントでは、アプリ内で ACTION_MEDIA_BUTTON イベントを処理する明示的な BroadcastReceiver コンポーネントを宣言する必要があります。

プレーヤーが処理できるメディア コントロール入力を宣言するには、setTransportControlFlags()RemoteControlClient。次のような FLAG_KEY_MEDIA_* フラグのセットを渡します。 FLAG_KEY_MEDIA_PREVIOUSFLAG_KEY_MEDIA_NEXT

次に、RemoteControlClientMediaManager.registerRemoteControlClient() に渡して登録する必要があります。 登録後、RemoteControlClient をインスタンス化したときに宣言したブロードキャスト レシーバは ACTION_MEDIA_BUTTON を受け取ります。 イベントをリッスンします。受け取るインテントには、メディアキーが押された KeyEvent が含まれます。これは、getParcelableExtra(Intent.EXTRA_KEY_EVENT) でインテントから取得できます。

再生中のメディアに関する情報をリモコンに表示するには、editMetaData() を呼び出して、返された RemoteControlClient.MetadataEditor。メディアのアートワーク、 経過時間などの数値情報、トラックのタイトルなどのテキスト情報が含まれます。対象 使用可能なキーについては、MediaMetadataRetrieverMETADATA_KEY_* フラグをご覧ください。

実装例については、Random Music Player をご覧ください。 Android 4.0 でリモート コントロール クライアントを有効にするなどの互換性ロジックを提供します。 Android 2.1 までさかのぼってデバイスのサポートを継続します。

メディア プレーヤー

  • MediaPlayer からオンライン メディアをストリーミングするには、INTERNET 権限が必要です。MediaPlayer を使用して次のことを行う場合 インターネットからコンテンツを再生するには、INTERNET 権限を追加しないと、Android でメディア再生が動作しなくなります 4.0.
  • setSurface() を使用すると、動画シンクとして動作するように Surface を定義できます。
  • setDataSource() でできること リクエストと一緒に追加の HTTP ヘッダーを送信できる。HTTP(S) ライブ ストリーミングに役立つ
  • HTTP(S) ライブ ストリーミングで、リクエスト全体で HTTP Cookie が尊重されるようになりました

メディアの種類

Android 4.0 では、次のサポートが追加されています。

  • HTTP/HTTPS ライブ ストリーミング プロトコル バージョン 3
  • ADTS raw AAC 音声エンコード
  • WebP イメージ
  • Matroska の動画

詳しくは、サポートされているメディアをご確認ください。 形式

カメラ

Camera クラスに、顔を検出して制御するための API が追加されました 測光エリアを指定します

顔検出

Android の顔検出 API を使用して、カメラアプリの機能を強化できるようになりました。 被写体の顔だけでなく、目や口などの特定の顔の特徴も検出します。

カメラアプリで顔を検出するには、setFaceDetectionListener() を呼び出して Camera.FaceDetectionListener を登録する必要があります。その後 startFaceDetection() を呼び出して顔の検出を開始します。

カメラシーンで 1 つ以上の顔が検出されると、onFaceDetection() コールバックが Camera.FaceDetectionListener の実装。 Camera.Face オブジェクト。

Camera.Face クラスのインスタンスは、Terraform に関するさまざまな情報を提供します。 以下が含まれます。

  • カメラの位置を基準として相対的に顔の境界を指定する Rect。 現在の画角
  • オブジェクトが特定のオブジェクトであるというシステムの信頼度を示す 1 ~ 100 の整数 人の顔
  • 複数の顔を追跡するための一意の ID
  • 目と口の位置を示す複数の Point オブジェクト 場所

注: 顔検出は、一部のデバイスではサポートされていない場合があります。 そのため、getMaxNumDetectedFaces() を呼び出して、戻り値が 指定することもできます。また、デバイスによっては目と口の認識に対応していないものもあります。 その場合、Camera.Face オブジェクトのフィールドは null になります。

フォーカスと測光のエリア

カメラのフォーカスや白色の測光に使用する領域を、カメラアプリで制御できるようになりました バランス 自動露出などですどちらの機能も、新しい Camera.Area クラスを使用して、 カメラの現在のビューのどの部分でフォーカスまたは測光を行う必要があるかを指定します。Camera.Area クラスのインスタンスは、Rect とエリアの重み(重要度のレベルを表す)を使用してエリアの境界を定義します。 他の領域と比較した相対面積(整数)を指定します。

フォーカス エリアまたは測光エリアを設定する前に、まず getMaxNumFocusAreas() または getMaxNumMeteringAreas() を呼び出す必要があります。ゼロが返された場合、 デバイスが対応する機能をサポートしていない。

使用するフォーカス領域や測光領域を指定するには、setFocusAreas() または setMeteringAreas() を呼び出します。それぞれが、考慮すべき領域を示す Camera.Area オブジェクトの List を受け取ります。 フォーカスや測光に使用します。たとえば、ユーザーが設定を実行できる機能を実装して、 フォーカス エリア。プレビューのエリアをタップすると、そのエリアが Camera.Area オブジェクトに変換され、シーンのそのエリアにフォーカスするようカメラにリクエストされます。 エリア内のシーンが変わると、そのエリアのフォーカスや露出も継続的に更新されます。

写真の連続オート フォーカス

写真の撮影時に連続オートフォーカス(CAF)を有効にできるようになりました。Compute Engine で CAF を有効にするには、 カメラアプリ、FOCUS_MODE_CONTINUOUS_PICTURE を渡す 宛先: setFocusMode()撮影の準備ができたら 写真の場合は、autoFocus() を呼び出します。Camera.AutoFocusCallback はすぐに、コールバックがかどうかを示すコールバックを 焦点が当てられましたコールバックの受信後に CAF を再開するには、cancelAutoFocus() を呼び出す必要があります。

注: 撮影時の連続オートフォーカスもサポートされます。 FOCUS_MODE_CONTINUOUS_VIDEO API レベル 9 で追加されました。

その他のカメラ機能

  • 動画の録画中に、動画セッションを中断することなく takePicture() を呼び出して写真を保存できるようになりました。その前に isVideoSnapshotSupported() を呼び出して、ハードウェアが サポートしています。
  • setAutoExposureLock()setAutoWhiteBalanceLock() で自動露出とホワイト バランスをロックして、自動露出を防止できるようになりました 変更されないようにすることができます。
  • カメラ プレビューの実行中に setDisplayOrientation() を呼び出せるようになりました。以前は、これを プレビュー開始前に表示されますが、画面の向きはいつでも変更できます。

カメラ ブロードキャスト インテント

  • Camera.ACTION_NEW_PICTURE: これは、ユーザーが新しい写真を撮影したことを示します。組み込みのカメラアプリが ブロードキャストされ、サードパーティのカメラアプリもこのインテントをブロードキャストする必要がある 撮影後に変更できます。
  • Camera.ACTION_NEW_VIDEO: これは、ユーザーが新しい動画をキャプチャしたことを示します。組み込みのカメラアプリが ブロードキャストされ、サードパーティのカメラアプリでもこのインテントをブロードキャストする必要がある 動画を撮影した後です

Android ビーム(NFC による NDEF プッシュ)

Android ビームは新しい NFC 機能であり、1 つのデバイスから NDEF メッセージを送信できます。 (「NDEF プッシュ」とも呼ばれるプロセス)を使用します。データ転送は、2 つの Google Cloud Android ビームをサポートする Android 搭載デバイスは、通常は近くにある(約 4 cm)。 背中が触れるようなものです。NDEF メッセージ内のデータには、任意のデータを含めることができます。 デバイス間で通信を行えます。たとえば、連絡帳アプリでは連絡先を共有したり、YouTube で動画を共有したり、ブラウザを Android ビームを使用して URL を共有しています。

Android ビームを使用してデバイス間でデータを送信するには、アクティビティ中に共有する情報を含む NdefMessage を作成する必要があります 使用できます。その後、次の 2 つのいずれかで NdefMessage をシステムに渡す必要があります。 方法:

  • アクティビティ中に push する NdefMessage を 1 つ定義します。

    いつでも setNdefPushMessage() を呼び出して設定できます 選択します。たとえば、このメソッドを呼び出し、アクティビティの onCreate() の間に NdefMessage を渡します。 メソッドを呼び出します。その後、アクティビティがアクティビティの最中に、別のデバイスで Android ビームが有効化されるたびに NdefMessage が他のデバイスに送信されます。

  • Android ビームの開始時に push する NdefMessage を定義します。

    NfcAdapter.CreateNdefMessageCallback を実装します。これにより、 createNdefMessage() の実装 メソッドは、送信する NdefMessage を返します。次に、NfcAdapter.CreateNdefMessageCallback の実装を setNdefPushMessageCallback() に渡します。

    この場合、アクティビティが 1 つの状態にある間に、別のデバイスで Android ビームを有効化すると、 フォアグラウンドの場合、システムは createNdefMessage() を呼び出して、 送信する NdefMessage。これにより、コンテンツが原因で Android ビームが開始されたときにのみ配信するように NdefMessage を定義できます。 メッセージの内容は、そのアクティビティの期間中に変わる可能性があります。

システムが NDEF を正常に配信した後に特定のコードを実行する場合 NfcAdapter.OnNdefPushCompleteCallback を実装し、setNdefPushCompleteCallback() で設定できます。システムは メッセージの配信時に onNdefPushComplete() を呼び出します。

受信デバイス上で、システムは通常の NFC と同様の方法で NDEF プッシュ メッセージをディスパッチします。 できます。システムが ACTION_NDEF_DISCOVERED を含むインテントを呼び出します。 アクティビティを開始するアクション。NdefMessage の最初の NdefRecord に従って、URL または MIME タイプを設定します。アクティビティを実行したい 指定すると、アプリにとって重要な URL または MIME タイプのインテント フィルタを宣言できます。詳細 Tag Dispatch について詳しくは、NFC デベロッパー ガイドをご覧ください。

NdefMessage に URI を含める場合、次の便利なメソッドを使用できます。 メソッド createUri を使用して、文字列または Uri オブジェクトに基づいて新しい NdefRecord を作成します。URI が Android ビーム イベントでもアプリにも受信させたい特殊な形式がある場合は、 同じ URI スキームを使用して、アクティビティのインテント フィルタを作成し、 受信します。

また、「Android アプリ レコード」NdefMessage を 受信する NDEF メッセージが他のメッセージであっても、アプリケーションで 同じインテントのアクションをフィルタできます。Android アプリのレコードを作成するには、 createApplicationRecord() を呼び出し、 指定します。別のデバイスが、次の文字列を含む NDEF メッセージを受信すると、 複数のアプリには、指定されたインテントを処理するアクティビティ、 常にアプリケーションのアクティビティにメッセージが配信されます( アプリケーション レコード)。対象のデバイスにアプリが現在インストールされていない場合は、 システムは Android アプリ レコードを使用して Google Play を起動し、ユーザーを インストールする必要があります。

アプリで NFC API を使用して NDEF プッシュ メッセージングを実行しない場合、Android では デフォルトの動作: アプリが 1 つのデバイスのフォアグラウンドにあり、Android ビームが 別の Android 搭載デバイスで呼び出された場合、そのデバイスが アプリを識別する Android アプリ レコード。受信デバイスに システムによって起動されます。インストールされていない場合は、Google Play が開き、 ユーザーにインストールしてもらう必要があります。

Android ビームとその他の NFC 機能について詳しくは、NFC の基本に関するデベロッパー ガイドをご覧ください。コードの例として、 については、Android Beam のデモ

Wi-Fi P2P

Android では、Android デバイスと Android 搭載デバイスの間で Wi-Fi ピアツーピア(P2P)接続がサポートされるようになりました その他の種類のデバイス(Wi-Fi Alliance の Wi-Fi DirectTM に準拠) 認定資格プログラムなど)が必要です。Android フレームワークは、 他のデバイスの検出と接続を可能にする Wi-Fi P2P API のセット Wi-Fi P2P をサポートしており、 Bluetooth 接続。

新しいパッケージ android.net.wifi.p2p には、ピアツーピアを実行するためのすべての API が含まれています。 おすすめします主なクラスは WifiP2pManager で、getSystemService(WIFI_P2P_SERVICE) を呼び出して取得できます。WifiP2pManager には、次のことができる API が含まれています。

  • initialize() を呼び出して、アプリケーションを P2P 接続用に初期化する
  • discoverPeers() に発信して付近のデバイスを検出します
  • connect() を呼び出して P2P 接続を開始します
  • その他

他にも、次のようなインターフェースとクラスが必要です。

  • WifiP2pManager.ActionListener インターフェースを使用すると、 ピアの検出やピアへの接続などのオペレーションが成功または失敗したときに発生するコールバック。
  • WifiP2pManager.PeerListListener インターフェースを使用すると、 検出されたピアに関する情報が含まれます。このコールバックが提供する WifiP2pDeviceList から、範囲内のデバイスごとに WifiP2pDevice オブジェクトを取得し、次のような情報を取得できます。 デバイス名、アドレス、デバイスの種類、デバイスがサポートする WPS 設定などが表示されます。
  • WifiP2pManager.GroupInfoListener インターフェースを使用すると、 P2P グループに関する情報を受信できます。このコールバックは WifiP2pGroup オブジェクトを提供し、このオブジェクトはオーナー、 ネットワーク名、パスフレーズなどです
  • WifiP2pManager.ConnectionInfoListener インターフェースを使用すると、 現在の接続に関する情報を受信します。このコールバックは WifiP2pInfo オブジェクトを提供します。このオブジェクトには、 グループ オーナーが誰であるかを確認します。

Wi-Fi P2P API を使用するには、アプリで次のユーザー権限をリクエストする必要があります。

  • ACCESS_WIFI_STATE
  • CHANGE_WIFI_STATE
  • INTERNET(ただし、アプリは技術的には インターネットへの通信。標準的な Java ソケットによる Wi-Fi P2P ピアとの通信にはインターネットが必要です。 権限など)。

Android システムは、特定の Wi-Fi P2P イベント中に、いくつかの異なるアクションをブロードキャストします。

詳しくは、WifiP2pManager のドキュメントをご覧ください。また、 こちらを Wi-Fi P2P デモ サンプル アプリケーションを実行します。

Bluetooth ヘルスデバイス

Android で Bluetooth ヘルス プロファイル デバイスがサポートされるようになりました。これにより、 Bluetooth: 心拍数モニターなど、Bluetooth をサポートするヘルスデバイスと通信します。 血液測定器、体温計、体重計です

通常のヘッドセットや A2DP プロファイル デバイスと同様に、BluetoothProfile.ServiceListenerHEALTH プロファイル タイプを指定して getProfileProxy() を呼び出し、プロファイルとの接続を確立する必要があります。 プロキシ オブジェクトです。

健康プロファイルのプロキシ(BluetoothHealth ペアリングされたヘルスデバイスへの接続と通信には、以下の新しい Bluetooth クラス:

  • BluetoothHealthCallback: このクラスを拡張して アプリケーションの登録状態の変化に関する通知を受け取り、 Bluetooth チャンネルの状態。
  • BluetoothHealthAppConfiguration: BluetoothHealthCallback へのコールバック中に、このオブジェクトのインスタンスを受け取ります。 には、使用可能な Bluetooth ヘルスデバイスに関する構成情報が記載されます。 BluetoothHealth API を使用して接続の開始や終了などのさまざまなオペレーションを実行できます。

Bluetooth ヘルス プロファイルの使用方法について詳しくは、BluetoothHealth のドキュメントをご覧ください。

ユーザー補助

Android 4.0 の新しいタッチガイドモードで視覚障がいのある方のユーザー補助機能を改善 および拡張 API を使用して、ビュー コンテンツに関する情報や、 先進的なユーザー補助サービスを開発しています。

タッチガイドモード

視力障がいのあるユーザーは、画面上の指を置いてドラッグすることで、画面を探索できるようになりました。 画面の音声による説明を聞くことができます。タッチガイドモードは 仮想カーソルを使用すると、スクリーン リーダーが画面と同じように説明テキストを識別できるようになります。 ユーザーが D-pad やトラックボールで移動するときに提供された情報を読むことで、 「カーソルを合わせた」シミュレーションによる android:contentDescriptionsetContentDescription()イベントです。したがって、 ビューの説明テキストを提供する必要があることに 留意してください アプリケーション、特に ImageButtonEditTextImageView などのウィジェット(説明的な内容が本来含まれていないもの) あります。

ビューのユーザー補助

スクリーン リーダーなどのユーザー補助サービスで利用できる情報を拡充するために、 カスタムの View コンポーネントにユーザー補助イベント用の新しいコールバック メソッドを実装します。

まず、Android では sendAccessibilityEvent() メソッドの動作が変更されたことに注意してください。 4.0.以前のバージョンの Android と同様に、ユーザーがデバイスでユーザー補助サービスを有効にしたとき クリックやホバーなどの入力イベントが発生すると、 sendAccessibilityEvent()。これまでは sendAccessibilityEvent() を実装すると次のようになります。 AccessibilityEvent を初期化して AccessibilityManager に送信します。新しい動作では、追加のコールバックが 以下のメソッドを使用すると、ビューとその親でさらにコンテキスト情報をイベントに追加できるようになります。

  1. sendAccessibilityEvent() メソッドと sendAccessibilityEventUnchecked() メソッドは呼び出されると、 宛先: onInitializeAccessibilityEvent()

    View のカスタム実装では、onInitializeAccessibilityEvent() を実装することをおすすめします。 追加のユーザー補助情報を AccessibilityEvent にアタッチするだけでなく、スーパー実装を呼び出して は、標準のコンテンツの説明、アイテムのインデックスなどのデフォルトの情報を提供します。 ただし、このコールバックにテキスト コンテンツを追加しないでください。 説明します。

  2. 初期化後、イベントがテキスト入力対象のイベントの種類のいずれかである場合 情報を取得すると、ビューは dispatchPopulateAccessibilityEvent() への呼び出しを受け取ります。 onPopulateAccessibilityEvent() に従います 呼び出すことができます。

    通常、View のカスタム実装では、onPopulateAccessibilityEvent() を実装して テキストがない場合やandroid:contentDescriptionテキスト コンテンツをAccessibilityEventに送信する 不十分です。スペースに AccessibilityEvent の場合は、getText().add() を呼び出します。

  3. この時点で、View は以下を呼び出して、ビュー階層の上位に渡します。 requestSendAccessibilityEvent() できます。その後、各親ビューは、次の方法でユーザー補助機能情報を拡張できます。 AccessibilityRecord を追加し、 最終的にルートビューに到達し、イベントが sendAccessibilityEvent()AccessibilityManager に送信されます。

View クラスを拡張するときに便利な上記の新しいメソッドに加えて、AccessibilityDelegate を拡張し、View setAccessibilityDelegate()。 その場合、ビュー内の各ユーザー補助メソッドは、 委任できます。たとえば、ビューは onPopulateAccessibilityEvent() の呼び出しを受け取ると、それを View.AccessibilityDelegate の同じメソッドを使用します。API によって処理されないメソッドは、 デリゲートはビューに直接戻され、デフォルトの動作になります。この設定では View クラスを拡張せずに、特定のビューに必要なメソッドのみを追加できます。

バージョン 4.0 より前の Android との互換性を維持しつつ、Android 4.0 のサポートも 最新バージョンの v4 サポート API で行うことができます。 ライブラリ互換性パッケージ、r4 内) 新しいユーザー補助 API を提供する一連のユーティリティ クラスを使用して、 考えています

ユーザー補助サービス

ユーザー補助サービスを開発する場合、さまざまなユーザー補助イベントに関する情報を が大幅に拡張され、ユーザー補助機能に関してより高度なフィードバックをユーザーに提供できるようになりました。イン 特に、イベントはビューの構成に基づいて生成され、より優れたコンテキスト情報と ユーザー補助サービスがビュー階層を走査して追加のビュー情報を取得し、 特殊なケースに対応します

ユーザー補助サービス(スクリーン リーダーなど)を開発する場合は、 次の手順に沿って、追加のコンテンツ情報を表示し、ビュー階層をトラバースします。

  1. アプリケーションから AccessibilityEvent を受け取ると、 AccessibilityEvent.getRecord() を呼び出して特定の AccessibilityRecord を取得します( あります。
  2. AccessibilityEvent または個々の AccessibilityRecord から、getSource() を呼び出して AccessibilityNodeInfo オブジェクトを取得できます。

    AccessibilityNodeInfo は単一のノードを表す そのウィンドウ コンテンツのユーザー補助情報を照会できる形式で、 あります。AccessibilityNodeInfo から返される AccessibilityEvent オブジェクトはイベント ソースを表し、 AccessibilityRecord は、イベントの前身を表します。 あります。

  3. AccessibilityNodeInfo を使用すると、情報をクエリできます。 概要を表示するには、getParent() または getChild() を呼び出してビューを走査します 子ビューをノードに追加することもできます。

アプリがユーザー補助サービスとしてシステムに公開されるようにするには、 AccessibilityServiceInfo に対応する XML 構成ファイルを宣言する必要があります。メッセージの作成について詳しくは、 ユーザー補助サービス。XML 設定について詳しくは、AccessibilityServiceSERVICE_META_DATA をご覧ください。

その他のユーザー補助 API

デバイスのユーザー補助の状態を確認したい場合は、AccessibilityManager に次のような新しい API が用意されています。

スペルチェック サービス

新しいスペル チェッカー フレームワークにより、 インプット メソッド フレームワーク(IME 用)。新しいスペルチェックを作成するには、 拡張 SpellCheckerService を追加し、SpellCheckerService.Session クラスを拡張してスペル候補を提供できるようにする インターフェースのコールバック メソッドで提供されたテキストに基づいて分割されます。SpellCheckerService.Session コールバック メソッドでは、 SuggestionsInfo オブジェクトとしてスペル候補を表示します。

スペルチェック サービスを使用するアプリは、そのサービスで要求されている BIND_TEXT_SERVICE 権限を宣言する必要があります。 また、サービスでインテントのアクションとして <action android:name="android.service.textservice.SpellCheckerService" /> を指定したインテント フィルタを宣言し、 スペルの構成情報を宣言する <meta-data> 要素を含める します。

サンプルを見る スペルチェック サービス サンプル スペルチェック クライアント アプリ

テキスト読み上げエンジン

Android のテキスト読み上げ(TTS)API が大幅に拡張され、アプリが カスタム TTS エンジンは簡単に実装できます。TTS エンジンを使用するアプリケーションには、 いくつかご紹介します

テキスト読み上げエンジンの使用

以前のバージョンの Android では、TextToSpeech クラスを使用していました。 システムが提供する TTS エンジンを使用してテキスト読み上げ(TTS)操作を実行するか、 setEngineByPackageName() を使用するカスタム エンジン。Android 4.0 では、setEngineByPackageName() メソッドが次のように変更されました。 非推奨になり、TTS エンジンのパッケージ名を受け入れる新しい TextToSpeech コンストラクタを使用して、使用するエンジンを指定できるようになりました。

getEngines() を使用して、使用可能な TTS エンジンをクエリすることもできます。このメソッドは、TextToSpeech.EngineInfo オブジェクトのリストを返します。このリストには、エンジンの アイコン、ラベル、パッケージ名があります。

テキスト読み上げエンジンの構築

以前のカスタム エンジンでは、文書化されていないネイティブ ヘッダーを使用してエンジンをビルドする必要がありました。 表示されます。Android 4.0 には、TTS エンジンを構築するための完全なフレームワーク API セットがあります。

基本設定では、TextToSpeechService を実装する必要があります。 INTENT_ACTION_TTS_SERVICE インテントに応答する。「 TTS エンジンの主な処理は、サービスの onSynthesizeText() コールバック中に行われます。 TextToSpeechService を拡張します。システムはこのメソッド 2 を実行します。 オブジェクト:

  • SynthesisRequest: これには、テキスト、画像、音声、 Synthesize、言語 / 地域、読み上げ速度、音声ピッチです。
  • SynthesisCallback: TTS エンジンに使用するインターフェースです。 生成された音声データをストリーミング オーディオとして配信します。まず、エンジンで start() を呼び出して、配信の準備ができたことを示す必要があります。 次に、audioAvailable() を呼び出します。 音声データをバイトバッファに渡します。エンジンがすべての音声を done() を呼び出します。

TTS エンジンを作成するための真の API がフレームワークでサポートされるようになったため、ネイティブ コードのサポート 実装が削除されました。互換性レイヤに関するブログ投稿を検索する を使用して、古い TTS エンジンを新しいフレームワークに変換できます。

新しい API を使用した TTS エンジンの例については、Text To Speech Engine サンプルアプリをご覧ください。

ネットワーク使用状況

Android 4.0 では、アプリケーションが使用しているネットワーク データの量を正確に把握できます。 設定アプリには、ユーザーが設定したネットワーク データ使用量の上限を管理できるコントロールや、 アプリごとにバックグラウンドデータの使用を無効にすることもできますユーザーが アプリがバックグラウンドでデータにアクセスできるようにするには、そのデータを使用する戦略を策定する必要があります。 効率的に接続し、利用可能な接続のタイプに応じて使用量を調整します。

大量のネットワーク トランザクションを実行するアプリケーションの場合、 は、アプリがデータを同期する頻度、同期のタイミング、 アップロードやダウンロードを Wi-Fi 接続時にのみ行う、ローミング中にデータを使用するかどうかなどを指定する コントロールが利用できないため、ユーザーがアプリのデータアクセスを無効にする アプリで使用するデータ量を細かく制御できるため、上限に近づいています。 これらの設定で設定アクティビティを提供する場合は、マニフェストに含める必要があります。 ACTION_MANAGE_NETWORK_USAGE のインテント フィルタを宣言する できます。例:

<activity android:name="DataPreferences" android:label="@string/title_preferences">
    <intent-filter>
       <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
       <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

このインテント フィルタは、アクティビティを管理するアクティビティであることをシステムに示す アプリのデータ使用量を追跡できますしたがって、ユーザーが現在のデバイスから 設定アプリ、「View application settings」ボタンをクリックすると 設定アクティビティを使用して、アプリで使用するデータ量をユーザーが調整できるようにします。

また、getBackgroundDataSetting() が 非推奨で、常に true を返します。代わりに getActiveNetworkInfo() を使用してください。ネットワークを試行する前に 常に getActiveNetworkInfo() を呼び出す必要があります。 現在のネットワークを表す NetworkInfo を取得し、isConnected() に対してクエリを実行してデバイスに 接続しますその後、デバイスが接続されているかどうかなど、他の接続プロパティを確認できます。 または Wi-Fi に接続していることを示します。

Enterprise

Android 4.0 では、エンタープライズ アプリの機能が強化され、次の機能が追加されました。

VPN サービス

新しい VpnService を使用すると、アプリケーションで独自の VPN(仮想 プライベート ネットワークなど)を Service として実行します。VPN サービスは、内部 IP アドレスを 独自のアドレスとルーティング ルールを持つ仮想ネットワークを構成し、すべての読み書きを 使用します。

VPN サービスを作成するには、VpnService.Builder を使用します。これにより、 ネットワーク アドレス、DNS サーバー、ネットワーク ルートなどです。完了したら、 ParcelFileDescriptor を返す establish() を呼び出して、インターフェースに取り込むことができます。

VPN サービスはパケットをインターセプトする可能性があるため、セキュリティ上の影響があります。そのため、 VpnService を実装する場合、システムのみがバインドできるように、サービスに BIND_VPN_SERVICE を要求する必要があります( システムに付与され、アプリはその権限をリクエストできません)。VPN サービスを使用するには ユーザーがシステム設定で手動で有効にする必要があります。

デバイス ポリシー

デバイス制限を管理するアプリケーションで、setCameraDisabled()USES_POLICY_DISABLE_CAMERA プロパティ(ポリシー構成ファイルの <disable-camera /> 要素で適用)を使用してカメラを無効にできるようになりました。

証明書の管理

新しい KeyChain クラスには、インポートとアクセスを可能にする API が用意されています。 システム キーストアに格納されます。証明書により、両方のクライアントを効率的にインストール 証明書(ユーザーの ID を検証)と認証局の証明書(ユーザーの ID を検証) 。ウェブブラウザやメール クライアントなどのアプリケーションは、インストールされている サーバーに対してユーザーを認証します。KeyChain を参照 ドキュメントをご覧ください

デバイス センサー

Android 4.0 では、2 つの新しいセンサータイプが追加されました。

デバイスに TYPE_AMBIENT_TEMPERATURE センサーと TYPE_RELATIVE_HUMIDITY センサーの両方がある場合は、それらを使用して露点温度を計算できます 絶対湿度などがあります

以前の温度センサー TYPE_TEMPERATURE は、 非推奨です。TYPE_AMBIENT_TEMPERATURE センサーを使用する してください。

さらに、Android の 3 つの合成センサーが大幅に改善され、 よりスムーズな出力を実現します。これらのセンサーには、重力センサー(TYPE_GRAVITY)、回転ベクトル センサー(TYPE_ROTATION_VECTOR)、直線加速度センサー(TYPE_LINEAR_ACCELERATION)などがあります。改善されたセンサーはジャイロスコープに依存します 出力を改善するため、ジャイロスコープを備えたデバイスでのみセンサーが表示されます。

アクションバー

ActionBar が更新され、いくつかの新しい動作がサポートされるようになりました。ほとんど 重要なのは、システムが実行時にアクションバーのサイズと構成を適切に管理できることです。 あらゆる画面サイズで最適なユーザー エクスペリエンスを提供できるよう、たとえば 画面が狭い場合(ハンドセットが縦向きになっているときなど)は、アクションバーが ナビゲーションタブが「積み上げ棒」で表示されます。このボタンはメインのアクションバーのすぐ下に表示されます。Google Chat では 有効にすることもできます下部の個別のバーにすべてのアクションアイテムが 画面の幅が狭いときにも 画面が見づらくなることがあります

分割アクションバー

アクションバーに複数のアクション アイテムが含まれている場合、それらのすべてが オーバーフロー メニューに配置される広告が多くなります。ただし Android 4.0 では、 「分割アクションバー」を有効にしてより多くのアクション項目を 画面下部にある個別のバーに 移動することもできます分割アクションバーを有効にするには、android:uiOptions"splitActionBarWhenNarrow"<application> タグまたは 個々の <activity> タグ 指定します。有効にすると、画面下部にバーが 画面の幅が狭い場合のすべてのアクション アイテムが表示されます(メインの アクションバー)が表示されます。

ActionBar.Tab API で提供されているナビゲーション タブを使用する場合は、 上部にメインのアクションバーは必要ない(上部にタブのみを表示したい)場合は、 分割アクションバーを上記のように作成し、また setDisplayShowHomeEnabled(false) を呼び出して アクションバーからアプリ アイコンをクリックします。メインのアクションバーに何も残っていないので、 が非表示になります。残っているのは、上部のナビゲーション タブと下部のアクション アイテムだけです。 クリックします。

アクションバーのスタイル

アクションバーにカスタム スタイルを適用する場合は、新しいスタイル プロパティ backgroundStackedbackgroundSplit を使用して背景を適用できます。 ドローアブルまたは色を積み上げ棒と分割棒にそれぞれ追加します。これらのスタイルは setStackedBackgroundDrawable()setSplitBackgroundDrawable() を持つランタイム。

アクション プロバイダ

新しい ActionProvider クラスを使用すると、 できます。アクション プロバイダでは、アクション ビュー、デフォルトのアクション動作、サブメニューを定義できます。 アクション アイテムごとに生成されます。アクション アイテムを作成する場合 動的な動作(変数のアクション ビュー、デフォルト アクション、サブメニューなど)については、再利用可能なコンポーネントを作成するために ActionProvider を拡張することをおすすめします。 フラグメントまたはアクティビティ内でさまざまなアクション アイテムの変換を処理する。

たとえば、ShareActionProviderActionProvider を拡張したもので、「共有」を容易にします。クリックします。代わりに、 ACTION_SEND インテントを呼び出す従来のアクション アイテムですが、 このアクション プロバイダを使用して、対応するアプリケーションのプルダウン リストを備えたアクション ビューを提示します。 ACTION_SEND インテントの引数。ユーザーが使用するアプリケーションを ShareActionProvider がその選択を記憶し、それを提供します。 そのアプリとの共有にすばやくアクセスできます。

アクション アイテムのアクション プロバイダを宣言するには、android:actionProviderClass を含めます。 アクティビティのクラス名を、アクティビティのオプション メニューの <item> 要素に追加してください。 指定します。例:

<item android:id="@+id/menu_share"
      android:title="Share"
      android:showAsAction="ifRoom"
      android:actionProviderClass="android.widget.ShareActionProvider" />

アクティビティのonCreateOptionsMenu() メニュー項目からアクション プロバイダのインスタンスを取得し、 インテント:

Kotlin

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.options, menu)
    val shareActionProvider = menu.findItem(R.id.menu_share)?.actionProvider as? ShareActionProvider
    // Set the share intent of the share action provider.
    shareActionProvider?.setShareIntent(createShareIntent())
    ...
    return super.onCreateOptionsMenu(menu)
}

Java

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options, menu);
    ShareActionProvider shareActionProvider =
          (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();
    // Set the share intent of the share action provider.
    shareActionProvider.setShareIntent(createShareIntent());
    ...
    return super.onCreateOptionsMenu(menu);
}

ShareActionProvider の使用例については、ApiDemos の ActionBarShareActionProviderActivity をご覧ください。

折りたたみ可能なアクション ビュー

アクション ビューを提供するアクション アイテムで、アクション ビューの状態と アクションアイテムの状態を表しますこれまでは SearchView しかサポートされていませんでした 折りたたみ可能でしたが、現在では任意のアクションアイテムと 展開した状態(アクション ビューを表示)と折りたたみ状態(アクション アイテムを表示)を切り替える 表示されます)。

アクション ビューを含むアクション アイテムが折りたたみ可能であることを宣言するには、メニューの XML ファイルで <item> 要素の android:showAsAction 属性に “collapseActionView" フラグを指定します。

アクション ビューの展開と折りたたみが切り替わったときにコールバックを受け取るには、 setOnActionExpandListener() を呼び出して、それぞれの MenuItem を持つ MenuItem.OnActionExpandListener のインスタンスを作成します。この処理は通常、onCreateOptionsMenu() コールバック中に行う必要があります。

折りたたみ可能なアクション ビューを制御するには、collapseActionView()expandActionView() を呼び出します。 それぞれの MenuItem

カスタム アクション ビューを作成するときに、新しい CollapsibleActionView インターフェースを実装して、ビューが展開されたときと、ビューが開いたときにコールバックを受け取るようにすることもできます。 閉じています。

アクションバーのその他の API

  • setHomeButtonEnabled() を使用すると、 アイコンやロゴがホームに移動するボタンとして機能するか、「上へ」移動するためのボタンとして機能するか(「true」を渡すと、Pod が ボタン)。
  • setIcon()setLogo() を使用すると、実行時にアクションバーのアイコンまたはロゴを定義できます。
  • Fragment.setMenuVisibility() を使用すると、 フラグメントで宣言されたオプション メニュー項目の表示を無効にしたり、この方法は、 フラグメントがアクティビティに追加されましたが、表示されていないため、メニュー項目を 非表示になっています。
  • FragmentManager.invalidateOptionsMenu() を使用すると、フラグメントのライフサイクルのさまざまな状態で、アクティビティのオプション メニューを無効にできます。 Activity の同等のメソッドを使用できない場合があります。

ユーザー インターフェースと表示

Android 4.0 では、さまざまな新しいビューやその他の UI コンポーネントが導入されています。

GridLayout

GridLayout は、子ビューを長方形に配置する新しいビューグループです。 表示されます。TableLayout とは異なり、GridLayout はフラット 構造を提供するためにテーブル行などの中間ビューを使用しません。 代わりに、子はどの行と列を占有させるかを指定します(セルは複数の 行や列など)に区切られ、デフォルトではグリッドの行と列にわたって順番にレイアウトされます。 GridLayout の向きは、連続する子がどの子に 横または縦に配置されます。子の間隔は、 新しい Space ビューのインスタンスを指定するか、関連するマージンのパラメータを設定します。 避けるべきです

ApiDemos を参照 GridLayout を使用したサンプルをご覧ください。

TextureView

TextureView は、 動画または OpenGL シーンとして表示できます。SurfaceView と類似していますが、TextureView は通常のビューのように動作し、 他の View オブジェクトと同じように扱うことができます。たとえば 変換を適用する、ViewPropertyAnimator を使用してアニメーション化する、または setAlpha() で不透明度を調整してください。

TextureView はハードウェア アクセラレーションされているウィンドウでのみ動作するので注意してください。

詳細については、TextureView のドキュメントをご覧ください。

切り替えウィジェット

新しい Switch ウィジェットは 2 つの状態の切り替えが可能で、ユーザーはウィジェットを 1 つにドラッグできる またはタップして(またはタップして)オプションを 2 つの状態の間で切り替えることができます。

android:textOn 属性と android:textOff 属性を使用して、テキストを指定できます。 スイッチにオン / オフ設定で表示されます。android:text 属性は、さらに スイッチの横にラベルを配置できます。

switch の使用例については、switches.xml レイアウト ファイルをご覧ください。 およびそれぞれのスイッチ アクティビティ。

Android 3.0 で、ポップ コンテキスト メニューを作成するための PopupMenu が導入されました 指定したアンカー ポイント(通常は選択したアイテムのポイント)から上に移動します。Android 4.0 では、 PopupMenu に次のような便利な機能があります。

  • XML メニュー リソースのポップアップ メニューの内容を inflate() を使用して簡単にインフレートし、メニュー リソース ID を渡すことができるようになりました。
  • また、受け取った通知を受け取れる PopupMenu.OnDismissListener を作成して、 メニューが閉じられたときのコールバックを定義します。

設定

新しい TwoStatePreference 抽象クラスは、Terraform の 設定も用意しています。新しい SwitchPreferenceTwoStatePreference の拡張機能で、Switch ウィジェットを 設定ビューで、ユーザーは追加のブラウザを開かなくても設定をオンまたはオフにできる 設定画面またはダイアログに 移動することもできますたとえば、設定アプリは Wi-Fi と Bluetooth の設定に SwitchPreference を使用します。

システムテーマ

Android 4.0 をターゲットとするすべてのアプリに適用されるデフォルトのテーマ(targetSdkVersion または minSdkVersion“14" 以上)は、 "デバイスのデフォルト"テーマ: Theme.DeviceDefault。考えられる原因 ダークモードです。

Theme.Holo ファミリーのテーマは変更されないことが保証されています 同じバージョンの Android を使用している場合に、デバイス間で通信できるようになります。明示的に アクティビティに Theme.Holo テーマのいずれかを適用すると、 同じ環境内での異なるデバイス間でも、これらのテーマのキャラクターが変わることはありませんのでご安心ください。 プラットフォーム バージョン。

アプリをデバイス全体のテーマに溶け込ませる場合(さまざまな OEM の システムに異なるデフォルト テーマを提供する場合)は、Theme.DeviceDefault ファミリーのテーマを明示的に適用する必要があります。

オプション メニューボタン

Android 4.0 以降、ハンドセットではメニュー ハードウェア ボタンが不要になりました。 ただし、既存のアプリケーションにオプション メニューが用意されていて、 メニューボタン。既存のアプリが引き続き想定どおりに動作するように、システムは 古いバージョンの Android 用に設計されたアプリの場合、画面上のメニューボタン。

最適なユーザー エクスペリエンスを実現するには、新しいアプリや更新したアプリでは、代わりに ActionBar を使用してメニュー項目にアクセスできるようにし、targetSdkVersion"14": 最新のフレームワークのデフォルト動作を利用します。

システム UI の表示コントロール

Android の初期の時代から、システムはステータスと呼ばれる UI コンポーネントを管理してきました。 バー: ハンドセット デバイスの上部に表示されるこのバーから、携帯通信会社や シグナル、時刻、通知などです。Android 3.0 にタブレットのシステムバーが追加されました デバイス: 画面下部にあり、システム ナビゲーション コントロール(ホーム、 戻るなどの要素)や、従来はステータスバーで提供されていた要素のインターフェースも指定できます。イン Android 4.0 には、ナビゲーション バーと呼ばれる新しいタイプのシステム UI が用意されています。マイページ ナビゲーション バーは、システムバーを改良し、 ナビゲーション コントロールが用意されている システムをナビゲートできるハードウェアはありませんが、 システムバーの通知 UI と設定コントロール。そのため、ナビゲーションを提供するデバイスは 上部にはステータスバーもあります

これまでは、FLAG_FULLSCREEN フラグを使用してハンドセットのステータスバーを非表示にできます。Android 4.0 では、 システムバーの表示状態を更新して、両方のシステムバーの動作をより正確に反映しました。 ナビゲーション バー:

  • STATUS_BAR_HIDDEN フラグは SYSTEM_UI_FLAG_LOW_PROFILE フラグに置き換わります。このフラグを設定すると、「ロー プロファイル」が有効になります。選択します。 アクセスできます。システムバーのナビゲーション ボタンの暗さやその他の要素も非表示になります。有効化 システム ナビゲーションの妨げになることなく、より没入感のあるゲームを作成できる できます。
  • STATUS_BAR_VISIBLE フラグに代わる SYSTEM_UI_FLAG_VISIBLE フラグは、システムバーまたはナビゲーション バーの表示をリクエストするものです。
  • SYSTEM_UI_FLAG_HIDE_NAVIGATION は、Google Cloud Storage バケットを ナビゲーションバーが 完全に非表示になりますこの機能はナビゲーション バーに対してのみ機能します。 (タブレットのシステムバーは非表示になりません)。ナビゲーション バーは、システムがユーザー入力を受け取るとすぐに表示に戻ります。そのため、このモードは 主に動画の再生など、画面全体が必要であるにもかかわらずユーザー入力が 不要です。

システムバーとナビゲーション バーの各フラグを設定するには、アクティビティの任意のビューで setSystemUiVisibility() を呼び出します。「 ウィンドウ マネージャーは、ウィンドウ内のすべてのビューのフラグをすべて組み合わせ(OR で結合)し、 ウィンドウに入力フォーカスがある限り、システム UI に適用できます。ウィンドウの入力が失われた場合 フォーカス(ユーザーがアプリから離れるか、ダイアログが表示されると)すると、フラグは効果を失います。 同様に、これらのビューをビュー階層から削除すると、そのフラグは適用されなくなります。

システム UI( たとえば、システム UI が非表示になったときにアクションバーやその他の UI コントロールを非表示にする)は、 View.OnSystemUiVisibilityChangeListener: 公開設定が変更されたときに通知を受け取る 変更できます

詳しくは、 OverscanActivity クラスを使用すると、さまざまなシステム UI オプションのデモを確認できます。

入力フレームワーク

Android 4.0 では、カーソルのホバー イベントと、新しいタッチペンおよびマウスボタン イベントのサポートが追加されています。

マウスオーバー イベント

View クラスが「hover」をサポートするようになりましたより充実したインタラクションを実現する ポインタ デバイス(マウスや画面上の操作を行うその他のデバイスなど)を使用して あります。

ビューでホバー イベントを受信するには、View.OnHoverListener を実装します。 setOnHoverListener() で登録します。カーソルを合わせると イベントが発生すると、リスナーは onHover() への呼び出しを受け取り、View イベントと、ホバーイベントのタイプを表す MotionEvent を受信します。 表示されます。マウスオーバー イベントは次のいずれかです。

View.OnHoverListener は、ホバーイベントを処理する場合、onHover() から true を返します。お使いの リスナーが false を返すと、ホバーイベントが通常どおり親ビューにディスパッチされます。

イベントに基づいて外観が変化するボタンやその他のウィジェットをアプリケーションで使用している場合、 現在の状態に対応していましたが、状態リスト ドローアブルandroid:state_hovered 属性を使用して、 ビューにカーソルを合わせたときに別の背景ドローアブルを表示する。

新しいホバーイベントのデモについては、Hover クラス( ApiDemos

タッチペンとマウスボタン イベント

Android で、デジタイザーなどのタッチペン入力デバイスから入力を受け取るための API が提供されるようになりました タブレット周辺機器やタッチペン対応タッチ スクリーンです。

タッチペン入力は、タップ入力やマウス入力と同様に機能します。タッチペンが接触しているとき デジタイザを使用すると、アプリケーションは、指で操作されたときと同じようにタッチイベントを受け取ります。 ディスプレイをタップします。タッチペンがデジタイザーの上にホバーすると、アプリケーションにホバーが表示される これは、ボタンがない場合にマウスポインタがディスプレイ上で移動された場合とまったく同じです。 押されることになります。

アプリケーションで、指、マウス、タッチペン、消しゴムの入力を区別するには、 「ツールタイプ」(getToolType() を使用して MotionEvent 内の各ポインタに関連付けられている)現在定義されているツールタイプは TOOL_TYPE_UNKNOWNTOOL_TYPE_FINGERTOOL_TYPE_MOUSETOOL_TYPE_STYLUS、 および TOOL_TYPE_ERASER。ツールタイプをクエリすると、アプリケーションで タッチペン入力を、指やマウスによる入力とは異なる方法で処理できます。

アプリケーションでは、「button」コマンドをクエリして、どのマウスまたはタッチペン ボタンが押されているかをクエリすることもできます。 state」getButtonState() を使用した MotionEvent の。現在定義されているボタンの状態は、BUTTON_PRIMARYBUTTON_SECONDARYBUTTON_TERTIARYBUTTON_BACKBUTTON_FORWARD です。便宜上、戻るマウスボタンと進むマウスボタンは、 KEYCODE_BACK キーと KEYCODE_FORWARD キーに自動的にマッピングされます。アプリケーションはこれらの鍵を処理して、 マウスボタンベースの「戻る」と「次へ」のナビゲーション。

接触点の位置と圧力を正確に測定することに加えて、一部のタッチペン入力は デバイスは、タッチペンの先端とデジタイザーの間の距離、タッチペンの傾斜角度、 タッチペンの向きの角度などですアプリケーションは、軸コード AXIS_DISTANCEAXIS_TILTAXIS_ORIENTATION を指定した getAxisValue() を使用して、この情報を取得できます。

ツールタイプ、ボタンの状態、新しい軸コードのデモンストレーションについては、TouchPaint をご覧ください。 クラスを使用します。

プロパティ

新しい Property クラスを使用すると、 プロパティを使用して、呼び出し元がターゲット オブジェクトで値を汎用的に設定または取得できるようにします。また、 フィールド/メソッドの参照を渡す機能を可能にし、コードで値を設定/取得できるようにする フィールドやメソッドの詳細を知らなくてもプロパティにアクセスできます。

たとえば、オブジェクト foo でフィールドの値 bar を設定する場合は、次のようにします。 次のように指定していました。

Kotlin

foo.bar = value

Java

foo.bar = value;

基になるプライベート フィールド bar のセッターを呼び出す場合は、 手順:

Kotlin

foo.setBar(value)

Java

foo.setBar(value);

ただし、foo インスタンスを渡して他のコードを設定する場合は、 bar 値を含む場合、Android 4.0 以前では、これを行うことができません。

Property クラスを使用すると、Property を宣言できます。 クラス Foo のオブジェクト BAR を使用して、次のインスタンス foo にフィールドを設定できるようにします。 クラス Foo は次のようになります。

Kotlin

BAR.set(foo, value)

Java

BAR.set(foo, value);

View クラスが Property クラスを使用するようになりました。 を使用すると、Android 3.0 で追加された変換プロパティ(ROTATIONROTATION_XTRANSLATION_X など)など、さまざまなフィールドを設定できます。

ObjectAnimator クラスも Property を使用します。 そのため、PropertyObjectAnimator を作成できます。これは、文字列ベースよりも高速で効率的かつタイプセーフです。 アプローチです

ハードウェア アクセラレーション

Android 4.0 以降、 アプリケーションで targetSdkVersion または minSdkVersion“14" 以降。一般に、ハードウェア アクセラレーションを使用すると、アニメーションがより滑らかになり、 ユーザー操作に対する全体的なパフォーマンスと応答性が向上します。

必要に応じて、hardwareAccelerated を使用してハードウェア アクセラレーションを手動で無効にできます。 個々の <activity> 要素または <application> の属性 要素です。また、setLayerType(LAYER_TYPE_SOFTWARE) を呼び出して、個々のビューのハードウェア アクセラレーションを無効にすることもできます。

サポートされていない描画のリストなど、ハードウェア アクセラレーションの詳細 詳しくは、ハードウェア Acceleration のドキュメントをご覧ください。

JNI の変更

以前のバージョンの Android では、JNI ローカル参照は間接的な処理ではありませんでした。Android を使用 使用できます。ガベージコレクタがオブジェクトを移動し なければ問題はありませんでしたが バグのあるコードを書くことができたため、機能しているように思われました。Android 4.0 では、 間接参照を使用します

JNI ローカル参照の詳細については、「ローカル参照とグローバル参照」をご覧ください。JNI に関するヒントをご覧ください。Android 4.0 では、 CheckJNI が拡張され、これらのエラーを検出できるようになりました。今後の投稿については、Android デベロッパー ブログをご覧ください JNI 参照の一般的なエラーとその修正方法について説明します。

JNI 実装の変更は、次のいずれかの設定を行って、Android 4.0 をターゲットとするアプリにのみ影響します。 targetSdkVersion または minSdkVersion“14" 以上に設定します。これらの属性を低い値に設定した場合は、 JNI ローカル参照は、以前のバージョンと同じように動作します。

Webkit

  • WebKit をバージョン 534.30 に更新しました
  • インド語フォント(デバナーガリ文字、ベンガル語、タミル語、複雑な文字のサポートを含む)をサポート グリフを結合するために必要なもの)を WebView と組み込みのブラウザで
  • WebView と 組み込みのブラウザ
  • WebDriver のサポートにより、 WebView を使用するアプリを簡単にテストできます。

Android ブラウザ

ブラウザ アプリケーションには、ウェブ アプリケーションをサポートするために次の機能が追加されています。

権限

新しい権限は次のとおりです。

  • ADD_VOICEMAIL: ボイスメール サービスにボイスメールの追加を許可します。 デバイスにメッセージが 送信されます
  • BIND_TEXT_SERVICE: SpellCheckerService を実装するサービスは、サービス自体に対してこの権限が必要です。
  • BIND_VPN_SERVICE: VpnService を実装するサービスは、サービス自体に対してこの権限が必要です。
  • android.Manifest.permission#READ_PROFILE: ContactsContract.Profile プロバイダに読み取りアクセス権を付与します。
  • android.Manifest.permission#WRITE_PROFILE: ContactsContract.Profile プロバイダに書き込みアクセス権を付与します。

デバイスの機能

デバイスの新機能は次のとおりです。

Android 4.0(API レベル)におけるすべての API の変更点について詳しくは、 14)については、API Differences Report をご覧ください。

以前の API

上記のすべてに加えて、Android 4.0 では以前のリリースのすべての API が自然にサポートされています。 Android 3.x プラットフォームは大画面のデバイスでしか利用できないため、 主にハンドセット向けに開発していた場合、Android に追加された API のすべてを把握していない可能性があります。 最新のリリースをご覧ください

今回リリースされた中でも特に注目すべき API をいくつかご紹介します。 スマートフォンにも搭載されています。

Android 3.0
  • Fragment: 1 つまたは複数のコンテナを分離するフレームワーク コンポーネント 各要素を、独自の UI とライフサイクルを定義する自己完結型のモジュールにまとめます。詳しくは、 フラグメントに関するデベロッパー ガイド。
  • ActionBar: 上部にある従来のタイトルバーの代替。 クリックします。左上にはアプリケーションのロゴが表示され、 メニュー項目用のインターフェースです。詳しくは、 アクションバーのデベロッパー ガイド
  • Loader: 非同期処理を容易にするフレームワーク コンポーネント UI コンポーネントと組み合わせてデータを読み込むことで、ユーザーの動作を妨げることなく できます。詳しくは、 ローダに関するデベロッパー ガイド。
  • システム クリップボード: アプリケーションは単なるテキスト以外のデータを、 システム全体のクリップボードに 書き込みますクリップされたデータには、書式なしテキスト、URI、インテントのいずれかを指定できます。詳しくは、 コピーして貼り付けるデベロッパー ガイド
  • ドラッグ&ドロップ: ビュー フレームワークに組み込まれた API のセットで、ドラッグ&ドロップを容易にします。 必要があります。詳しくは、 ドラッグ&ドロップに関するデベロッパー ガイド。
  • まったく新しい柔軟なアニメーション フレームワークにより、任意のプロパティをアニメーション化できます。 オブジェクト(ビュー、ドローアブル、フラグメント、オブジェクトなど)を作成し、アニメーション要素を定義します。 指定することもできます。新しいフレームワークにより、Android でアニメーションが作られる 簡単になりました。詳しくは、 プロパティ アニメーション デベロッパー ご覧ください
  • RenderScript のグラフィックスと Compute Engine: RenderScript は ネイティブ レベルでのグラフィック レンダリングとコンピューティング API です。これは、C(C99 標準)で記述します。 ポータブルな環境を維持しながら、ネイティブ環境に期待するパフォーマンスを実現できます。 さまざまな CPU や GPU に分散します詳しくは、 RenderScript デベロッパー ご覧ください
  • ハードウェア アクセラレーテッド 2D グラフィック: マニフェスト要素の <application> で {android:hardwareAccelerated="true"} を設定して、 個々の <activity> 要素に対して あります。この結果 よりスムーズなアニメーション、スムーズなスクロール、全体的なパフォーマンスとユーザー レスポンスの向上 です。

    注: アプリケーションの minSdkVersion または targetSdkVersion"14" 以降、ハードウェア アクセラレーションはデフォルトで有効になっています。

  • その他。Android 3.0 プラットフォームをご覧ください。 メモをご覧ください。
Android 3.1
  • USB API: 接続された周辺機器を Android アプリ。API は、USB スタックと次のサービスをベースとしています。 USB ホストとデバイスの両方のインタラクションのサポートなど、プラットフォームに組み込まれています。詳しくは、USB ホストとアクセサリに関するデベロッパー ガイドをご覧ください。
  • MTP/PTP API: 接続されたカメラや他の PTP とアプリケーションを直接通信可能 デバイスの接続や取り外しに関する通知の受信、デバイス上のファイルやストレージの管理 ファイルやメタデータをデバイス間で転送できます。MTP API は PTP ルールを MTP(メディア転送プロトコル)仕様のサブセットです。詳しくは、 android.mtp のドキュメントを参照してください。
  • RTP API: Android は、組み込みの RTP(リアルタイム トランスポート プロトコル)スタックに API を公開しています。 アプリケーションをオンデマンドまたはインタラクティブなデータ ストリーミングの管理に使用できます。特にアプリは VoIP、プッシュ ツー トーク、会議、音声ストリーミングを提供する FLUIDEFI では、API を使用して 利用可能な任意のネットワークでデータ ストリームを送受信します。android.net.rtp のドキュメントをご覧ください。
  • ジョイスティックとその他の一般的なモーション入力のサポート。
  • Android 3.1 プラットフォームをご覧ください。 メモをご覧ください。
Android 3.2
  • 新しい画面で API をサポートしており、アプリの動作をより詳細に制御可能 さまざまな画面サイズで表示できますこの API は、既存の画面サポートモデルを ディメンションに基づいて特定の画面サイズ範囲( 汎用的なピクセル単位ではなく、密度に依存しないピクセル単位(幅 600 dp、720 dp など) (large、xlarge など)。これはたとえば 5 インチと7 インチ従来のバージョンでは両方とも 「大」あります。ブログの投稿 を参照してください。 画面サイズを管理するための新しいツールをご覧ください。
  • <uses-feature> の新しい定数を 横向きまたは縦向きの画面の向きの要件を宣言します。
  • デバイスの「画面サイズ」画面の向きに応じて設定が変更されるようになりました あります。API レベル 13 以降をターゲットとしているアプリの場合、"screenSize" を処理する必要があります。 "orientation" の構成変更も処理する場合は、構成の変更が必要になります。詳しくは、android:configChanges をご覧ください。
  • Android 3.2 プラットフォームをご覧ください。 その他の新しい API に関する注意書きをご覧ください。

API レベル

Android 4.0 API には、整数 14 という識別子です。 「API レベル」と呼ばれるこの識別子により、システムは アプリケーションがシステムに対応しているかどうかを事前に確認できます。

Android 4.0 で導入された API をアプリで使用するには、 API レベル 14 または 高くなります。必要に応じて、ラベルの追加が必要になることがあります。 android:minSdkVersion="14" 属性を <uses-sdk> 要素です。

詳細については、API とは何か レベル