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
インテントを使用して、
アクティビティを新規作成します。このインテントを使用する際、
また、以下のエクストラを使用して予定の詳細を指定できます。
Events.TITLE
: 名前 イベントCalendarContract.EXTRA_EVENT_BEGIN_TIME
: イベント開始時間から エポックCalendarContract.EXTRA_EVENT_END_TIME
: イベント エポックからのミリ秒単位の終了時間Events.EVENT_LOCATION
: 予定の場所Events.DESCRIPTION
: イベント 説明文Intent.EXTRA_EMAIL
: 転送先のメールアドレス 招待Events.RRULE
: 繰り返し ルールを使用します。Events.ACCESS_LEVEL
: 予定が限定公開か一般公開かEvents.AVAILABILITY
: この予定の期間中に他の予定を同時にスケジュール設定できるかどうか
ボイスメール プロバイダ
新しいボイスメール プロバイダを使用すると、アプリケーションでボイスメールを ユーザーのすべてのボイスメールを 1 つのビジュアル プレゼンテーションに表示できます。たとえば 1 人のユーザーが 1 つは電話のサービス プロバイダから、もう 1 つは VoIP またはその他の代替音声から 提供します。これらのアプリでは、Voicemail Provider API を使用してボイスメールをデバイスに追加できます。「 組み込みの電話アプリで、すべてのボイスメールが統合プレゼンテーションでユーザーに提示されます。 すべてのボイスメールを読み取れるのはシステムの電話アプリケーションだけですが、 ボイスメールを提供する各アプリケーションは、システムに追加したものを読み取ることができます(ただし、 他のサービスからのボイスメールの読み取り)。
現在 API では、サードパーティ製アプリが Gmail からのボイスメールを一切読み取れないため、 ボイスメール API を使用する必要があるサードパーティ アプリは、ボイスメールに対応しているアプリのみです。 ユーザーに配信する必要があります
VoicemailContract
クラスは、コンテンツ プロバイダを定義します。
ボイスメール プロバイダ。サブクラス VoicemailContract.Voicemails
と VoicemailContract.Status
は、アプリが以下の操作を行うためのテーブルを提供します。
デバイスに保存するボイスメール データを挿入します。ボイスメール プロバイダ アプリの例については、
ボイスメール プロバイダ
デモ。
マルチメディア
Android 4.0 では、写真 動画、音楽。
メディア エフェクト
新しいメディア エフェクト フレームワークでは、画像や画像にさまざまな視覚効果を適用できます。 できます。たとえば、画像エフェクトを使用すると、赤目を修正したり、画像をグレースケールに変換したり、 明るさの調整、彩度の調整、画像の回転、魚眼効果の適用などを行えます。「 パフォーマンスを最大化するために、GPU ですべてのエフェクト処理が実行されます。
パフォーマンスを最大化するために、エフェクトは OpenGL テクスチャに直接適用されるため、アプリケーションは エフェクト API を使用するには、有効な OpenGL コンテキストが必要です。適用するテクスチャ ビットマップ、動画、さらにはカメラの効果もあります。ただし、使用できる一定の制限が テクスチャは次の条件を満たす必要があります。
GL_TEXTURE_2D
テクスチャ画像にバインドする必要があります。- 少なくとも 1 つの mipmap レベルが含まれている必要があります。
Effect
オブジェクトでは、適用可能な単一のメディア エフェクトを定義します。
作成します。Effect
を作成する基本的なワークフローは次のとおりです。
- OpenGL ES 2.0 コンテキストから
EffectContext.createWithCurrentGlContext()
を呼び出します。 - 返された
EffectContext
を使用してEffectContext.getFactory()
を呼び出します。これにより、インスタンスが返されます。 /EffectFactory
。 createEffect()
を呼び出し、 @link android.media.effect.EffectFactory} のエフェクト名(EFFECT_FISHEYE
やEFFECT_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_PREVIOUS
、FLAG_KEY_MEDIA_NEXT
。
次に、RemoteControlClient
を MediaManager.registerRemoteControlClient()
に渡して登録する必要があります。
登録後、RemoteControlClient
をインスタンス化したときに宣言したブロードキャスト レシーバは ACTION_MEDIA_BUTTON
を受け取ります。
イベントをリッスンします。受け取るインテントには、メディアキーが押された KeyEvent
が含まれます。これは、getParcelableExtra(Intent.EXTRA_KEY_EVENT)
でインテントから取得できます。
再生中のメディアに関する情報をリモコンに表示するには、editMetaData()
を呼び出して、返された
RemoteControlClient.MetadataEditor
。メディアのアートワーク、
経過時間などの数値情報、トラックのタイトルなどのテキスト情報が含まれます。対象
使用可能なキーについては、MediaMetadataRetriever
の METADATA_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 イベント中に、いくつかの異なるアクションをブロードキャストします。
WIFI_P2P_CONNECTION_CHANGED_ACTION
: P2P 接続状態が変化した場合ですこれには、WifiP2pInfo
オブジェクトを含むEXTRA_WIFI_P2P_INFO
とNetworkInfo
を含むEXTRA_NETWORK_INFO
が含まれます。 渡されます。WIFI_P2P_STATE_CHANGED_ACTION
: P2P 状態。 有効または無効にできます。EXTRA_WIFI_STATE
があり、WIFI_P2P_STATE_DISABLED
またはWIFI_P2P_STATE_ENABLED
がある。WIFI_P2P_PEERS_CHANGED_ACTION
: ピアのリスト デバイスが変更されました。WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
: 詳細 このデバイスが変更されました。
詳しくは、WifiP2pManager
のドキュメントをご覧ください。また、
こちらを
Wi-Fi P2P デモ
サンプル アプリケーションを実行します。
Bluetooth ヘルスデバイス
Android で Bluetooth ヘルス プロファイル デバイスがサポートされるようになりました。これにより、 Bluetooth: 心拍数モニターなど、Bluetooth をサポートするヘルスデバイスと通信します。 血液測定器、体温計、体重計です
通常のヘッドセットや A2DP プロファイル デバイスと同様に、BluetoothProfile.ServiceListener
と HEALTH
プロファイル タイプを指定して getProfileProxy()
を呼び出し、プロファイルとの接続を確立する必要があります。
プロキシ オブジェクトです。
健康プロファイルのプロキシ(BluetoothHealth
ペアリングされたヘルスデバイスへの接続と通信には、以下の新しい
Bluetooth クラス:
BluetoothHealthCallback
: このクラスを拡張して アプリケーションの登録状態の変化に関する通知を受け取り、 Bluetooth チャンネルの状態。BluetoothHealthAppConfiguration
:BluetoothHealthCallback
へのコールバック中に、このオブジェクトのインスタンスを受け取ります。 には、使用可能な Bluetooth ヘルスデバイスに関する構成情報が記載されます。BluetoothHealth
API を使用して接続の開始や終了などのさまざまなオペレーションを実行できます。
Bluetooth ヘルス プロファイルの使用方法について詳しくは、BluetoothHealth
のドキュメントをご覧ください。
ユーザー補助
Android 4.0 の新しいタッチガイドモードで視覚障がいのある方のユーザー補助機能を改善 および拡張 API を使用して、ビュー コンテンツに関する情報や、 先進的なユーザー補助サービスを開発しています。
タッチガイドモード
視力障がいのあるユーザーは、画面上の指を置いてドラッグすることで、画面を探索できるようになりました。
画面の音声による説明を聞くことができます。タッチガイドモードは
仮想カーソルを使用すると、スクリーン リーダーが画面と同じように説明テキストを識別できるようになります。
ユーザーが D-pad やトラックボールで移動するときに提供された情報を読むことで、
「カーソルを合わせた」シミュレーションによる android:contentDescription
と setContentDescription()
イベントです。したがって、
ビューの説明テキストを提供する必要があることに
留意してください
アプリケーション、特に ImageButton
、EditText
、
ImageView
などのウィジェット(説明的な内容が本来含まれていないもの)
あります。
ビューのユーザー補助
スクリーン リーダーなどのユーザー補助サービスで利用できる情報を拡充するために、
カスタムの View
コンポーネントにユーザー補助イベント用の新しいコールバック メソッドを実装します。
まず、Android では sendAccessibilityEvent()
メソッドの動作が変更されたことに注意してください。
4.0.以前のバージョンの Android と同様に、ユーザーがデバイスでユーザー補助サービスを有効にしたとき
クリックやホバーなどの入力イベントが発生すると、
sendAccessibilityEvent()
。これまでは
sendAccessibilityEvent()
を実装すると次のようになります。
AccessibilityEvent
を初期化して AccessibilityManager
に送信します。新しい動作では、追加のコールバックが
以下のメソッドを使用すると、ビューとその親でさらにコンテキスト情報をイベントに追加できるようになります。
sendAccessibilityEvent()
メソッドとsendAccessibilityEventUnchecked()
メソッドは呼び出されると、 宛先:onInitializeAccessibilityEvent()
View
のカスタム実装では、onInitializeAccessibilityEvent()
を実装することをおすすめします。 追加のユーザー補助情報をAccessibilityEvent
にアタッチするだけでなく、スーパー実装を呼び出して は、標準のコンテンツの説明、アイテムのインデックスなどのデフォルトの情報を提供します。 ただし、このコールバックにテキスト コンテンツを追加しないでください。 説明します。- 初期化後、イベントがテキスト入力対象のイベントの種類のいずれかである場合
情報を取得すると、ビューは
dispatchPopulateAccessibilityEvent()
への呼び出しを受け取ります。onPopulateAccessibilityEvent()
に従います 呼び出すことができます。通常、
View
のカスタム実装では、onPopulateAccessibilityEvent()
を実装して テキストがない場合やandroid:contentDescription
テキスト コンテンツをAccessibilityEvent
に送信する 不十分です。スペースにAccessibilityEvent
の場合は、getText()
.add()
を呼び出します。 - この時点で、
View
は以下を呼び出して、ビュー階層の上位に渡します。requestSendAccessibilityEvent()
できます。その後、各親ビューは、次の方法でユーザー補助機能情報を拡張できます。AccessibilityRecord
を追加し、 最終的にルートビューに到達し、イベントがsendAccessibilityEvent()
でAccessibilityManager
に送信されます。
View
クラスを拡張するときに便利な上記の新しいメソッドに加えて、AccessibilityDelegate
を拡張し、View
setAccessibilityDelegate()
。
その場合、ビュー内の各ユーザー補助メソッドは、
委任できます。たとえば、ビューは onPopulateAccessibilityEvent()
の呼び出しを受け取ると、それを
View.AccessibilityDelegate
の同じメソッドを使用します。API によって処理されないメソッドは、
デリゲートはビューに直接戻され、デフォルトの動作になります。この設定では
View
クラスを拡張せずに、特定のビューに必要なメソッドのみを追加できます。
バージョン 4.0 より前の Android との互換性を維持しつつ、Android 4.0 のサポートも 最新バージョンの v4 サポート API で行うことができます。 ライブラリ(互換性パッケージ、r4 内) 新しいユーザー補助 API を提供する一連のユーティリティ クラスを使用して、 考えています
ユーザー補助サービス
ユーザー補助サービスを開発する場合、さまざまなユーザー補助イベントに関する情報を が大幅に拡張され、ユーザー補助機能に関してより高度なフィードバックをユーザーに提供できるようになりました。イン 特に、イベントはビューの構成に基づいて生成され、より優れたコンテキスト情報と ユーザー補助サービスがビュー階層を走査して追加のビュー情報を取得し、 特殊なケースに対応します
ユーザー補助サービス(スクリーン リーダーなど)を開発する場合は、 次の手順に沿って、追加のコンテンツ情報を表示し、ビュー階層をトラバースします。
- アプリケーションから
AccessibilityEvent
を受け取ると、AccessibilityEvent.getRecord()
を呼び出して特定のAccessibilityRecord
を取得します( あります。 AccessibilityEvent
または個々のAccessibilityRecord
から、getSource()
を呼び出してAccessibilityNodeInfo
オブジェクトを取得できます。AccessibilityNodeInfo
は単一のノードを表す そのウィンドウ コンテンツのユーザー補助情報を照会できる形式で、 あります。AccessibilityNodeInfo
から返されるAccessibilityEvent
オブジェクトはイベント ソースを表し、AccessibilityRecord
は、イベントの前身を表します。 あります。AccessibilityNodeInfo
を使用すると、情報をクエリできます。 概要を表示するには、getParent()
またはgetChild()
を呼び出してビューを走査します 子ビューをノードに追加することもできます。
アプリがユーザー補助サービスとしてシステムに公開されるようにするには、
AccessibilityServiceInfo
に対応する XML 構成ファイルを宣言する必要があります。メッセージの作成について詳しくは、
ユーザー補助サービス。XML 設定について詳しくは、AccessibilityService
と SERVICE_META_DATA
をご覧ください。
その他のユーザー補助 API
デバイスのユーザー補助の状態を確認したい場合は、AccessibilityManager
に次のような新しい API が用意されています。
AccessibilityManager.AccessibilityStateChangeListener
は、ユーザー補助機能が有効になっているときや、いつでもコールバックを受け取れるインターフェースです。 無効です。getEnabledAccessibilityServiceList()
は、ユーザー補助サービスに関する情報を提供します。 できます。isTouchExplorationEnabled()
が伝える タッチガイドモードが有効かどうかがわかります。
スペルチェック サービス
新しいスペル チェッカー フレームワークにより、
インプット メソッド フレームワーク(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_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)
を呼び出して
アクションバーからアプリ アイコンをクリックします。メインのアクションバーに何も残っていないので、
が非表示になります。残っているのは、上部のナビゲーション タブと下部のアクション アイテムだけです。
クリックします。
アクションバーのスタイル
アクションバーにカスタム スタイルを適用する場合は、新しいスタイル プロパティ backgroundStacked
と backgroundSplit
を使用して背景を適用できます。
ドローアブルまたは色を積み上げ棒と分割棒にそれぞれ追加します。これらのスタイルは
setStackedBackgroundDrawable()
と setSplitBackgroundDrawable()
を持つランタイム。
アクション プロバイダ
新しい ActionProvider
クラスを使用すると、
できます。アクション プロバイダでは、アクション ビュー、デフォルトのアクション動作、サブメニューを定義できます。
アクション アイテムごとに生成されます。アクション アイテムを作成する場合
動的な動作(変数のアクション ビュー、デフォルト アクション、サブメニューなど)については、再利用可能なコンポーネントを作成するために ActionProvider
を拡張することをおすすめします。
フラグメントまたはアクティビティ内でさまざまなアクション アイテムの変換を処理する。
たとえば、ShareActionProvider
は ActionProvider
を拡張したもので、「共有」を容易にします。クリックします。代わりに、
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 の
設定も用意しています。新しい SwitchPreference
は TwoStatePreference
の拡張機能で、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_UNKNOWN
、TOOL_TYPE_FINGER
、
TOOL_TYPE_MOUSE
、TOOL_TYPE_STYLUS
、
および TOOL_TYPE_ERASER
。ツールタイプをクエリすると、アプリケーションで
タッチペン入力を、指やマウスによる入力とは異なる方法で処理できます。
アプリケーションでは、「button」コマンドをクエリして、どのマウスまたはタッチペン ボタンが押されているかをクエリすることもできます。
state」getButtonState()
を使用した MotionEvent
の。現在定義されているボタンの状態は、BUTTON_PRIMARY
、BUTTON_SECONDARY
、BUTTON_TERTIARY
、BUTTON_BACK
、BUTTON_FORWARD
です。便宜上、戻るマウスボタンと進むマウスボタンは、
KEYCODE_BACK
キーと KEYCODE_FORWARD
キーに自動的にマッピングされます。アプリケーションはこれらの鍵を処理して、
マウスボタンベースの「戻る」と「次へ」のナビゲーション。
接触点の位置と圧力を正確に測定することに加えて、一部のタッチペン入力は
デバイスは、タッチペンの先端とデジタイザーの間の距離、タッチペンの傾斜角度、
タッチペンの向きの角度などですアプリケーションは、軸コード AXIS_DISTANCE
、AXIS_TILT
、AXIS_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 で追加された変換プロパティ(ROTATION
、ROTATION_X
、TRANSLATION_X
など)など、さまざまなフィールドを設定できます。
ObjectAnimator
クラスも Property
を使用します。
そのため、Property
で ObjectAnimator
を作成できます。これは、文字列ベースよりも高速で効率的かつタイプセーフです。
アプローチです
ハードウェア アクセラレーション
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 ブラウザ
ブラウザ アプリケーションには、ウェブ アプリケーションをサポートするために次の機能が追加されています。
- パフォーマンス向上のための V8 JavaScript コンパイラの更新
- Android から引き継がれたその他の注目すべき機能強化
3.0 がハンドセットで利用可能になりました。
<ph type="x-smartling-placeholder">
- </ph>
- すべてのページでの固定位置要素のサポート
- HTML メディア キャプチャ
- デバイスの向き イベント
- CSS の 3D 変換
権限
新しい権限は次のとおりです。
ADD_VOICEMAIL
: ボイスメール サービスにボイスメールの追加を許可します。 デバイスにメッセージが 送信されますBIND_TEXT_SERVICE
:SpellCheckerService
を実装するサービスは、サービス自体に対してこの権限が必要です。BIND_VPN_SERVICE
:VpnService
を実装するサービスは、サービス自体に対してこの権限が必要です。- android.Manifest.permission#READ_PROFILE:
ContactsContract.Profile
プロバイダに読み取りアクセス権を付与します。 - android.Manifest.permission#WRITE_PROFILE:
ContactsContract.Profile
プロバイダに書き込みアクセス権を付与します。
デバイスの機能
デバイスの新機能は次のとおりです。
FEATURE_WIFI_DIRECT
: アプリが 用途 ピアツーピア通信用の Wi-Fi。
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 とは何か レベル