Android 6.0(M)では、ユーザーとアプリ デベロッパー向けの新機能が提供されます。このドキュメントでは、特に重要な API の概要を説明します。
開発する
Android 6.0 向けアプリのビルドを開始するには、まず Android SDK を入手する必要があります。次に、SDK Manager を使用して Android 6.0 SDK Platform とシステム イメージをダウンロードします。
対象 API レベルを更新する
Android を搭載したデバイス向けにアプリを最適化するには、targetSdkVersion を "23" に設定し、Android システム イメージにアプリをインストールしてテストしてから、この変更を加えて更新したアプリを公開します。
Android API を使用しながら、minSdkVersion でサポートされていない API を実行する前にシステム API レベルをチェックする条件をコードに追加することで、古いバージョンもサポートできます。下位互換性を維持する方法について詳しくは、さまざまなプラットフォーム バージョンのサポートをご覧ください。
API レベルの仕組みについて詳しくは、API レベルとはをご覧ください。
指紋認証
このリリースでは、対応デバイスで指紋スキャンを使用してユーザーを認証できる新しい API が提供されます。これらの API は、Android Keystore システムと組み合わせて使用します。
指紋スキャンでユーザーを認証するには、新しい FingerprintManager クラスのインスタンスを取得し、authenticate() メソッドを呼び出します。アプリは、指紋認証センサーを備えた対応デバイスで実行されている必要があります。アプリで指紋認証フローのユーザー インターフェースを実装し、UI で標準の Android 指紋アイコンを使用する必要があります。Android の指紋アイコン(c_fp_40px.png)は、生体認証サンプルに含まれています。指紋認証を使用するアプリを複数開発している場合は、各アプリでユーザーの指紋を個別に認証する必要があることに注意してください。
アプリでこの機能を使用するには、まずマニフェストに USE_FINGERPRINT 権限を追加します。
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
指紋認証のアプリ実装については、生体認証のサンプルを参照してください。これらの認証 API を他の Android API と組み合わせて使用する方法のデモについては、動画 指紋認証 API と支払い API をご覧ください。
この機能をテストする場合は、次の手順を行います。
- まだインストールしていない場合は、Android SDK Tools リビジョン 24.3 をインストールします。
- [設定] > [セキュリティ] > [指紋] に移動して、登録手順に沿ってエミュレータに新しい指紋を登録します。
- エミュレータを使用して、次のコマンドで指紋タッチ イベントをエミュレートします。同じコマンドを使用して、ロック画面またはアプリで指紋タッチ イベントをエミュレートします。
adb -e emu finger touch <finger_id>
Windows では、
telnet 127.0.0.1 <emulator-id>の後にfinger touch <finger_id>を実行する必要がある場合があります。
認証情報の確認
アプリは、ユーザーが最後にデバイスをロック解除したタイミングに基づいてユーザーを認証できます。この機能により、ユーザーはアプリ固有の追加のパスワードを記憶する必要がなくなり、デベロッパーは独自の認証ユーザー インターフェースを実装する必要がなくなります。アプリでは、ユーザー認証に公開鍵または秘密鍵の実装と組み合わせてこの機能を使用する必要があります。
ユーザーが正常に認証された後に同じ鍵を再利用できるタイムアウト期間を設定するには、KeyGenerator または KeyPairGenerator を設定するときに、新しい setUserAuthenticationValidityDurationSeconds() メソッドを呼び出します。
再認証ダイアログを過度に表示しないようにしてください。アプリはまず暗号オブジェクトを使用し、タイムアウトが切れた場合は createConfirmDeviceCredentialIntent() メソッドを使用してアプリ内でユーザーを再認証する必要があります。
アプリリンク
このリリースでは、より強力なアプリリンクを提供することで、Android のインテント システムが強化されています。この機能を使用すると、所有しているウェブ ドメインにアプリを関連付けることができます。この関連付けに基づいて、プラットフォームは特定のウェブリンクを処理するために使用するデフォルトのアプリを決定し、ユーザーにアプリの選択を求めるプロンプトをスキップできます。この機能を実装する方法については、アプリリンクの処理をご覧ください。
アプリの自動バックアップ
アプリの完全なデータ バックアップと復元が自動的に行われるようになりました。この動作を有効にするには、アプリが Android 6.0(API レベル 23)をターゲットにする必要があります。追加のコードは必要ありません。ユーザーが Google アカウントを削除すると、バックアップ データも削除されます。この機能の仕組みと、ファイル システムでバックアップする内容を設定する方法については、アプリの自動バックアップを設定するをご覧ください。
Direct Share
このリリースでは、ユーザーが直感的かつ迅速に共有できる API が提供されます。アプリ内の特定のアクティビティを起動する直接共有ターゲットを定義できるようになりました。これらの直接共有ターゲットは、[共有] メニューを通じてユーザーに公開されます。この機能を使用すると、ユーザーは他のアプリ内の連絡先などのターゲットにコンテンツを共有できます。たとえば、ダイレクト共有ターゲットは別のソーシャル ネットワーク アプリでアクティビティを起動し、ユーザーがそのアプリの特定の友だちやコミュニティにコンテンツを直接共有できるようにします。
ダイレクト共有ターゲットを有効にするには、ChooserTargetService クラスを拡張するクラスを定義する必要があります。マニフェストでサービスを宣言します。その宣言内で、BIND_CHOOSER_TARGET_SERVICE 権限と SERVICE_INTERFACE アクションを使用するインテント フィルタを指定します。
次の例は、マニフェストで ChooserTargetService を宣言する方法を示しています。
<service android:name=".ChooserTargetService" android:label="@string/service_name" android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> <intent-filter> <action android:name="android.service.chooser.ChooserTargetService" /> </intent-filter> </service>
ChooserTargetService に公開するアクティビティごとに、アプリ マニフェストに名前 "android.service.chooser.chooser_target_service" の <meta-data> 要素を追加します。
<activity android:name=".MyShareActivity” android:label="@string/share_activity_label"> <intent-filter> <action android:name="android.intent.action.SEND" /> </intent-filter> <meta-data android:name="android.service.chooser.chooser_target_service" android:value=".ChooserTargetService" /> </activity>
音声操作
このリリースでは、新しい音声操作 API が提供されます。この API を音声アクションと組み合わせることで、会話型の音声操作機能をアプリに組み込むことができます。isVoiceInteraction() メソッドを呼び出して、音声操作によってアクティビティがトリガーされたかどうかを判断します。その場合、アプリは VoiceInteractor クラスを使用して、ユーザーに音声確認をリクエストしたり、オプションのリストから選択したりできます。
ほとんどの音声操作は、ユーザーの音声操作から始まります。ただし、音声操作アクティビティはユーザー入力なしで開始することもできます。たとえば、音声操作で起動された別のアプリも、音声操作を起動するインテントを送信できます。アクティビティがユーザーの音声クエリから起動されたのか、別の音声操作アプリから起動されたのかを判断するには、isVoiceInteractionRoot() メソッドを呼び出します。別のアクティビティがアクティビティを起動した場合、メソッドは false を返します。アプリは、ユーザーにこの操作の意図を確認するよう求めることができます。
音声操作の実装について詳しくは、音声操作のデベロッパー サイトをご覧ください。
Assist API
このリリースでは、ユーザーがアシスタントを通じてアプリを利用する新しい方法が提供されます。この機能を使用するには、アシスタントが現在のコンテキストを使用できるようにする必要があります。有効にすると、ユーザーはホームボタンを長押しして、どのアプリ内でもアシスタントを呼び出すことができます。
アプリは、FLAG_SECURE フラグを設定することで、現在のコンテキストをアシスタントと共有しないように選択できます。プラットフォームからアシスタントに渡される基準セットの情報に加えて、アプリは新しい AssistContent クラスを使用して追加情報を共有できます。
アプリからアシスタントに追加のコンテキストを提供するには、次の手順を行います。
Application.OnProvideAssistDataListenerインターフェースを実装します。registerOnProvideAssistDataListener()を使用してこのリスナーを登録します。- アクティビティ固有のコンテキスト情報を提供するには、
onProvideAssistData()コールバックと、必要に応じて新しいonProvideAssistContent()コールバックをオーバーライドします。
Adoptable Storage デバイス
このリリースでは、SD カードなどの外部ストレージ デバイスを採用できるようになりました。外部ストレージ デバイスを取り込むと、デバイスが暗号化され、内部ストレージのように動作するようにフォーマットされます。この機能により、ユーザーはアプリとそのアプリのプライベート データをストレージ デバイス間で移動できます。アプリを移動する際、システムはマニフェストの android:installLocation 設定を尊重します。
アプリが次の API またはフィールドにアクセスする場合、アプリが内部ストレージ デバイスと外部ストレージ デバイスの間で移動されると、返されるファイルパスが動的に変更されることに注意してください。ファイルパスを構築する際は、常にこれらの API を動的に呼び出すことを強くおすすめします。ハードコードされたファイルパスを使用したり、以前にビルドされた完全修飾ファイルパスを永続化したりしないでください。
Contextメソッド:ApplicationInfoフィールド:
この機能をデバッグするには、次のコマンドを実行して、USB On-The-Go(OTG)ケーブルで Android デバイスに接続された USB ドライブの採用を有効にします。
$ adb shell sm set-force-adoptable true
通知
このリリースでは、通知に関する以下の API の変更が追加されています。
- 新しい アラームのみのサイレント モードに対応する新しい
INTERRUPTION_FILTER_ALARMSフィルタレベル。 - ユーザーがスケジュールしたリマインダーを他のイベント(
CATEGORY_EVENT)やアラーム(CATEGORY_ALARM)と区別するために使用される新しいCATEGORY_REMINDERカテゴリ値。 setSmallIcon()メソッドとsetLargeIcon()メソッドを介して通知に添付できる新しいIconクラス。同様に、addAction()メソッドは、ドローアブル リソース ID ではなくIconオブジェクトを受け取るようになりました。- アプリが現在有効な通知を特定できる新しい
getActiveNotifications()メソッド。
Bluetooth タッチペンのサポート
このリリースでは、Bluetooth スタイラスを使用したユーザー入力のサポートが改善されています。対応する Bluetooth スタイラスをスマートフォンやタブレットとペア設定して接続できます。接続中は、タッチスクリーンの位置情報がタッチペンの圧力とボタンの情報と統合され、タッチスクリーン単独の場合よりも幅広い表現が可能になります。アプリは、アクティビティで View.OnContextClickListener オブジェクトと GestureDetector.OnContextClickListener オブジェクトを登録することで、スタイラス ボタンの押下をリッスンし、セカンダリ アクションを実行できます。
MotionEvent メソッドと定数を使用して、スタイラス ボタンの操作を検出します。
- アプリの画面でボタン付きのスタイラスをユーザーがタッチすると、
getTooltype()メソッドはTOOL_TYPE_STYLUSを返します。 - Android 6.0(API レベル 23)をターゲットとするアプリの場合、ユーザーがスタイラスのメインボタンを押すと、
getButtonState()メソッドはBUTTON_STYLUS_PRIMARYを返します。スタイラスに 2 つ目のボタンがある場合、ユーザーがそのボタンを押すと、同じメソッドがBUTTON_STYLUS_SECONDARYを返します。ユーザーが両方のボタンを同時に押すと、メソッドは両方の値を OR 演算した値(BUTTON_STYLUS_PRIMARY|BUTTON_STYLUS_SECONDARY)を返します。 -
プラットフォームの以前のバージョンを対象とするアプリの場合、
getButtonState()メソッドはBUTTON_SECONDARY(スタイラスのメインボタンの押下)、BUTTON_TERTIARY(スタイラスのセカンダリ ボタンの押下)、またはその両方を返します。
Bluetooth Low Energy スキャンの改善
アプリが Bluetooth Low Energy スキャンを実行する場合は、新しい setCallbackType() メソッドを使用して、設定された ScanFilter に一致するアドバタイズメント パケットをシステムが初めて検出したとき、または長時間経過後に検出したときに、コールバックに通知するように指定します。このスキャン方法は、以前のプラットフォーム バージョンで提供されていたものよりも電力効率に優れています。
Hotspot 2.0 リリース 1 のサポート
このリリースでは、Nexus 6 と Nexus 9 デバイスで Hotspot 2.0 Release 1 仕様のサポートが追加されました。アプリで Hotspot 2.0 認証情報をプロビジョニングするには、WifiEnterpriseConfig クラスの新しいメソッド(setPlmn() や setRealm() など)を使用します。WifiConfiguration オブジェクトでは、FQDN フィールドと providerFriendlyName フィールドを設定できます。新しい isPasspointNetwork() メソッドは、検出されたネットワークが Hotspot 2.0 アクセス ポイントを表すかどうかを示します。
4K ディスプレイ モード
プラットフォームで、互換性のあるハードウェアでディスプレイの解像度を 4K レンダリングにアップグレードするようアプリがリクエストできるようになりました。現在の物理解像度をクエリするには、新しい Display.Mode API を使用します。UI が低い論理解像度で描画され、より大きな物理解像度にアップスケールされる場合、getPhysicalWidth() メソッドが返す物理解像度は、getSize() がレポートする論理解像度と異なる可能性があります。
アプリのウィンドウの preferredDisplayModeId プロパティを設定することで、アプリの実行中に物理解像度を変更するようシステムにリクエストできます。この機能は、4K ディスプレイの解像度に切り替える場合に便利です。4K ディスプレイ モードでは、UI は元の解像度(1080p など)でレンダリングされ、4K にアップスケールされますが、SurfaceView オブジェクトはネイティブ解像度でコンテンツを表示する場合があります。
テーマ設定可能な ColorStateList
Android 6.0(API レベル 23)を搭載したデバイスの ColorStateList でテーマ属性がサポートされるようになりました。Resources.getColorStateList() メソッドと Resources.getColor() メソッドのサポートが終了しました。これらの API を呼び出している場合は、代わりに新しい Context.getColorStateList() メソッドまたは Context.getColor() メソッドを呼び出してください。これらのメソッドは、ContextCompat を介して v4 appcompat ライブラリでも使用できます。
音声に関する機能
このリリースでは、Android のオーディオ処理が強化されています。具体的には、次の点が改善されています。
- 新しい
android.media.midiAPI を使用した MIDI プロトコルのサポート。これらの API を使用して、MIDI イベントを送受信します。 - デジタル オーディオのキャプチャ オブジェクトと再生オブジェクトをそれぞれ作成し、オーディオ ソースとシンクのプロパティを構成してシステムのデフォルトをオーバーライドするための、新しい
AudioRecord.BuilderクラスとAudioTrack.Builderクラス。 - 音声デバイスと入力デバイスを関連付けるための API フック。これは、アプリで Android TV に接続されたゲーム コントローラやリモコンから音声検索を開始できる場合に特に便利です。ユーザーが検索を開始すると、システムは新しい
onSearchRequested()コールバックを呼び出します。ユーザーの入力デバイスにマイクが内蔵されているかどうかを確認するには、そのコールバックからInputDeviceオブジェクトを取得し、新しいhasMicrophone()メソッドを呼び出します。 - 現在システムに接続されているすべてのオーディオ デバイスのリストを取得できる新しい
getDevices()メソッド。オーディオ機器の接続または切断時にシステムからアプリに通知を受け取る場合は、AudioDeviceCallbackオブジェクトを登録することもできます。
動画の機能
このリリースでは、動画処理 API に次の新機能が追加されています。
- アプリケーションが音声ストリームと動画ストリームを同期してレンダリングするのに役立つ新しい
MediaSyncクラス。音声バッファはノンブロッキング方式で送信され、コールバックを介して返されます。また、動的な再生速度もサポートしています。 - 新しい
EVENT_SESSION_RECLAIMEDイベント。アプリによって開かれたセッションがリソース マネージャーによって再利用されたことを示します。アプリで DRM セッションを使用している場合は、このイベントを処理し、再利用されたセッションを使用しないようにする必要があります。 - 新しい
ERROR_RECLAIMEDエラーコード。これは、リソース マネージャーがコーデックで使用されているメディア リソースを再利用したことを示します。この例外を除き、コーデックは終端状態に移行したため、リリースする必要があります。 - サポートされている同時実行コーデック インスタンスの最大数のヒントを取得するための新しい
getMaxSupportedInstances()インターフェース。 - 早送りまたはスローモーション再生のメディア再生速度を設定する新しい
setPlaybackParams()メソッド。また、動画に合わせて音声の再生を自動的に伸縮または高速化します。
カメラ機能
このリリースには、カメラのライトにアクセスするための新しい API と、カメラによる画像の再処理のための新しい API が含まれています。
Flashlight API
カメラデバイスにフラッシュ ユニットがある場合、setTorchMode() メソッドを呼び出して、カメラデバイスを開かずにフラッシュ ユニットの懐中電灯モードをオンまたはオフに切り替えることができます。アプリは、フラッシュ ユニットまたはカメラ デバイスの排他的な所有権を持ちません。懐中電灯モードは、カメラデバイスが使用できなくなった場合、または懐中電灯をオンにしている他のカメラ リソースが使用できなくなった場合、オフになり、使用できなくなります。他のアプリも setTorchMode() を呼び出して、懐中電灯モードをオフにできます。懐中電灯モードをオンにした最後のアプリが閉じられると、懐中電灯モードはオフになります。
registerTorchCallback() メソッドを呼び出すことで、トーチモードのステータスに関する通知を受け取るコールバックを登録できます。コールバックが初めて登録されると、フラッシュ ユニットを備えた現在認識されているすべてのカメラ デバイスのトーチモードのステータスとともに、すぐに呼び出されます。トーチモードのオン / オフが正常に切り替わると、onTorchModeChanged() メソッドが呼び出されます。
再処理 API
Camera2 API が拡張され、YUV とプライベートの不透明形式の画像再処理がサポートされるようになりました。これらの再処理機能が利用可能かどうかを判断するには、getCameraCharacteristics() を呼び出して REPROCESS_MAX_CAPTURE_STALL キーを確認します。デバイスが再処理をサポートしている場合は、createReprocessableCaptureSession() を呼び出して再処理可能なカメラ キャプチャ セッションを作成し、入力バッファの再処理のリクエストを作成できます。
ImageWriter クラスを使用して、入力バッファ フローをカメラの再処理入力に接続します。空のバッファを取得するには、次のプログラミング モデルを使用します。
dequeueInputImage()メソッドを呼び出します。- 入力バッファにデータを入力します。
queueInputImage()メソッドを呼び出して、バッファをカメラに送信します。
ImageWriter オブジェクトを PRIVATE 画像とともに使用している場合、アプリは画像データに直接アクセスできません。代わりに、バッファのコピーなしで queueInputImage() メソッドを呼び出して、PRIVATE 画像を ImageWriter に直接渡します。
ImageReader クラスで PRIVATE 形式の画像ストリームがサポートされるようになりました。このサポートにより、アプリは ImageReader 出力画像の循環キューを維持し、1 つ以上の画像を選択して、カメラの再処理のために ImageWriter に送信できます。
Android for Work の機能
このリリースには、Android for Work 向けの次の新しい API が含まれています。
- 会社所有の単一用途デバイスの管理機能の強化: デバイス オーナーは、会社所有の単一用途(COSU)デバイスの管理を改善するために、次の設定を管理できるようになりました。
setKeyguardDisabled()メソッドを使用してキーガードを無効または再度有効にします。setStatusBarDisabled()メソッドを使用して、ステータスバー(クイック設定、通知、Google Now を起動するナビゲーション スワイプアップ ジェスチャーを含む)を無効または再度有効にします。UserManager定数DISALLOW_SAFE_BOOTを使用して、セーフブートを無効または再度有効にします。STAY_ON_WHILE_PLUGGED_IN定数を使用して、電源に接続している間は画面がオフにならないようにします。
- デバイス オーナーによるアプリのサイレント インストールとアンインストール: デバイス オーナーは、Google Play for Work とは別に、
PackageInstallerAPI を使用してアプリをサイレント インストールおよびアンインストールできるようになりました。ユーザー操作なしでアプリを取得してインストールするデバイス オーナーを介してデバイスをプロビジョニングできるようになりました。この機能は、Google アカウントを有効にせずにキオスクなどのデバイスのワンタッチ プロビジョニングを有効にする場合に便利です。 - エンタープライズ証明書へのサイレント アクセス: アプリが
choosePrivateKeyAlias()を呼び出す際、ユーザーに証明書の選択を求める前に、プロファイル オーナーまたはデバイス オーナーがonChoosePrivateKeyAlias()メソッドを呼び出して、リクエスト元のアプリにエイリアスをサイレントに提供できるようになりました。この機能を使用すると、ユーザー インタラクションなしで管理対象アプリに証明書へのアクセス権を付与できます。 - システム アップデートの自動承認。
setSystemUpdatePolicy()を使用してシステム アップデート ポリシーを設定することで、デバイス オーナーは、たとえばキオスク デバイスの場合にシステム アップデートを自動的に受け入れたり、アップデートを延期してユーザーがアップデートを適用できないように最長 30 日間設定したりできるようになりました。さらに、管理者は、キオスク デバイスが使用されていない時間帯など、アップデートを適用する必要がある 1 日の時間帯を設定できます。システム アップデートが利用可能になると、デバイス ポリシー コントローラ アプリがシステム アップデート ポリシーを設定しているかどうかが確認され、それに応じて動作します。 -
委任された証明書のインストール: プロファイル オーナーまたはデバイス オーナーは、サードパーティ製アプリに次の
DevicePolicyManager証明書管理 API を呼び出す権限を付与できるようになりました。 - データ使用量のトラッキング。プロファイル オーナーまたはデバイス オーナーは、新しい
NetworkStatsManagerメソッドを使用して、[設定] > [データ使用量] に表示されるデータ使用量統計情報をクエリできるようになりました。プロファイル オーナーには、管理するプロファイルのデータをクエリする権限が自動的に付与されます。デバイス オーナーは、管理対象のメインユーザーの使用状況データにアクセスできます。 - 実行時の権限の管理:
プロファイル オーナーまたはデバイス オーナーは、
setPermissionPolicy()を使用して、すべてのアプリのすべての実行時リクエストに対する権限ポリシーを設定し、ユーザーに権限の付与を求めるか、権限を自動的に付与または拒否するかを選択できます。後者のポリシーが設定されている場合、ユーザーは [設定] のアプリの権限画面で、プロファイル オーナーまたはデバイス オーナーによる選択を変更できません。 - 設定の VPN: VPN アプリが [設定] > [その他] > [VPN] に表示されるようになりました。また、VPN の使用に伴う通知は、VPN の構成方法に固有のものになりました。プロファイル所有者の場合、VPN が管理対象プロファイル、個人用プロファイル、または両方に構成されているかどうかに応じて通知が異なります。デバイス所有者の場合、通知は VPN がデバイス全体に設定されているかどうかに固有のものです。
- 仕事用ステータスの通知: 管理対象プロファイルのアプリがフォアグラウンドでアクティビティを実行しているときに、ステータスバーにブリーフケース アイコンが表示されるようになりました。さらに、デバイスが管理対象プロファイル内のアプリのアクティビティに直接ロック解除された場合、仕事用プロファイル内にいることをユーザーに通知するトーストが表示されます。