Android 6.0 API

Android 6.0(M)では、ユーザーとアプリ デベロッパー向けに新機能が提供されます。このドキュメントでは、特に注目すべき API を紹介します。

開発する

Android 6.0 向けのアプリを作成するには、まず Android SDK を入手する必要があります。次に、SDK Manager を使用して Android 6.0 SDK プラットフォームとシステム イメージをダウンロードします。

対象 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 の動画をご覧ください。

この機能をテストする場合は、次の操作を行います。

  1. Android SDK Tools リビジョン 24.3 をインストールします(まだインストールしていない場合)。
  2. [設定] > [セキュリティ] > [指紋] に移動して、エミュレータに新しい指紋を登録し、登録手順に沿って操作します。
  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 アカウントを削除すると、バックアップ データも削除されます。この機能の仕組みと、ファイル システムでバックアップする対象を設定する方法については、アプリの自動バックアップの設定をご覧ください。

直接共有

ダイレクト シェア機能が表示されているモバイル画面の下部

このリリースでは、ユーザーが直感的かつすばやく共有できるようにするための API が提供されます。アプリで特定のアクティビティを起動するダイレクト シェア ターゲットを定義できるようになりました。ダイレクト シェア ターゲットは、[共有] メニューを介してユーザーに公開されます。この機能を使用すると、ユーザーは他のアプリ内にある連絡先などのターゲットとコンテンツを共有できます。たとえば、直接共有ターゲットは、別のソーシャル ネットワーク アプリのアクティビティを起動し、ユーザーはそのアプリ内の特定の友だちまたはコミュニティと直接コンテンツを共有できます。

直接共有ターゲットを有効にするには、ChooserTargetService クラスを拡張するクラスを定義する必要があります。マニフェストでサービスを宣言します。その宣言内で、SERVICE_INTERFACE アクションを使用して BIND_CHOOSER_TARGET_SERVICE 権限とインテント フィルタを指定します。

次の例は、マニフェストで 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 クラスを使用して追加情報を共有できます。

アプリから追加のコンテキストをアシスタントに提供するには、次の手順を行います。

  1. Application.OnProvideAssistDataListener インターフェースを実装します。
  2. このリスナーを登録するには、registerOnProvideAssistDataListener() を使用します。
  3. アクティビティ固有のコンテキスト情報を提供するには、onProvideAssistData() コールバックと、必要に応じて新しい onProvideAssistContent() コールバックをオーバーライドします。

Adoptable Storage デバイス

今回のリリースにより、SD カードなどの外部ストレージ デバイスを追加できるようになりました。外部ストレージ デバイスを導入すると、内部ストレージのように動作するようにデバイスが暗号化およびフォーマットされます。この機能により、ユーザーはアプリとアプリの個人データの両方をストレージ デバイス間で移動できます。アプリを移動するときに、システムはマニフェストの android:installLocation の設定に従います。

アプリが次の API やフィールドにアクセスする場合、アプリが内部ストレージ デバイスと外部ストレージ デバイスの間で移動すると、返されるファイルパスが動的に変化することに注意してください。ファイルパスを構築する場合は、これらの API を常に動的に呼び出すことを強くおすすめします。ハードコードされたファイルパスを使用したり、以前にビルドした完全修飾ファイルパスを保持したりしないでください。

この機能をデバッグするには、次のコマンドを実行して、USB On-The-Go(OTG)ケーブルで Android デバイスに接続されている USB ドライブの導入を有効にします。

$ adb shell sm set-force-adoptable true

通知

このリリースでは、通知に関する次の API の変更を追加しました。

  • 新しい「アラームのみ」のサイレント モードに対応する新しい INTERRUPTION_FILTER_ALARMS フィルタレベル。
  • 新しい CATEGORY_REMINDER カテゴリ値。ユーザーがスケジュール設定したリマインダーを他のイベント(CATEGORY_EVENT)やアラーム(CATEGORY_ALARM)と区別するために使用されます。
  • 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 に一致するアドバタイズ パケットを最初に検出したとき、または後で確認したときに、システムがコールバックに通知することを指定します。スキャンに対するこのアプローチは、以前のプラットフォーム バージョンよりも電力効率が良くなります。

アクセス ポイント 2.0 リリース 1 のサポート

このリリースでは、Nexus 6 デバイスと Nexus 9 デバイスでアクセス ポイント 2.0 リリース 1 仕様のサポートが追加されました。アプリに Hotspot 2.0 の認証情報をプロビジョニングするには、WifiEnterpriseConfig クラスの新しいメソッド(setPlmn()setRealm() など)を使用します。WifiConfiguration オブジェクトでは、FQDN フィールドと providerFriendlyName フィールドを設定できます。新しい isPasspointNetwork() メソッドは、検出されたネットワークがアクセス ポイント 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.midi API での MIDI プロトコルのサポート。MIDI イベントを送受信するには、これらの API を使用します。
  • 新しい AudioRecord.Builder クラスと AudioTrack.Builder クラスにより、それぞれデジタル オーディオのキャプチャ オブジェクトと再生オブジェクトを作成し、システムのデフォルトをオーバーライドするようにオーディオ ソース プロパティとシンク プロパティを構成します。
  • オーディオ デバイスと入力デバイスを関連付ける API フック。これは、Android TV に接続されたゲーム コントローラやリモコンからユーザーが音声検索を開始できるアプリの場合に特に便利です。ユーザーが検索を開始すると、新しい onSearchRequested() コールバックが呼び出されます。ユーザーの入力デバイスにマイクが内蔵されているかどうかを確認するには、そのコールバックから InputDevice オブジェクトを取得して、新しい hasMicrophone() メソッドを呼び出します。
  • システムに現在接続されているすべてのオーディオ機器のリストを取得できる新しい getDevices() メソッドです。AudioDeviceCallback オブジェクトを登録して、オーディオ機器の接続時や接続解除時にシステムからアプリに通知させることもできます。

動画の機能

このリリースでは、動画処理 API に次のような新機能を追加しました。

  • アプリが音声ストリームと動画ストリームを同期的にレンダリングできるようにする新しい MediaSync クラス。オーディオ バッファは非ブロック形式で送信され、コールバックを介して返されます。動的な再生速度にも対応しています。
  • 新しい EVENT_SESSION_RECLAIMED イベント。アプリによって開かれたセッションがリソース マネージャーによって再利用されたことを示します。アプリで DRM セッションを使用する場合は、このイベントを処理し、再利用されたセッションを使用しないでください。
  • 新しい ERROR_RECLAIMED エラーコード。リソース マネージャーがコーデックによって使用されたメディア リソースを再要求しました。この例外では、コーデックは終了状態に移行したため、解放する必要があります。
  • サポートされている同時実行コーデック インスタンスの最大数のヒントを取得する、新しい getMaxSupportedInstances() インターフェース。
  • 高速またはスローモーション再生のメディア再生レートを設定する新しい setPlaybackParams() メソッドを追加しました。また、動画に合わせて音声の再生を自動的にストレッチまたはスピードアップします。

カメラ機能

このリリースには、カメラのライトへのアクセスとカメラによる画像の再処理を行うための次の新しい API が含まれています。

ライト API

カメラデバイスがフラッシュ ユニットを搭載している場合は、setTorchMode() メソッドを呼び出して、カメラデバイスを開かずにフラッシュ ユニットの懐中電灯モードのオン / オフを切り替えることができます。アプリにフラッシュ ユニットまたはカメラデバイスの独占的な所有権はありません。トーチモードは、カメラデバイスが使用不能になったとき、またはトーチをオンにしたまま他のカメラリソースが使用不能になったときに、オフになり、使用できなくなります。他のアプリでも setTorchMode() を呼び出して、トーチモードをオフにできます。トーチモードをオンにした最後のアプリが閉じると、トーチモードはオフになります。

registerTorchCallback() メソッドを呼び出して、トーチモードのステータスについて通知するコールバックを登録できます。コールバックが初めて登録されると、現在認識されているフラッシュ ユニット付きのカメラデバイスのすべてで、トーチモードのステータスで直ちに呼び出されます。トーチモードが正常にオンまたはオフになると、onTorchModeChanged() メソッドが呼び出されます。

再処理 API

Camera2 API は、YUV とプライベート不透明形式の画像の再処理をサポートするように拡張されました。これらの再処理機能が利用可能かどうかを判断するには、getCameraCharacteristics() を呼び出して REPROCESS_MAX_CAPTURE_STALL キーを確認します。デバイスが再処理をサポートしている場合は、createReprocessableCaptureSession() を呼び出して再処理可能なカメラ キャプチャ セッションを作成し、入力バッファの再処理のリクエストを作成できます。

ImageWriter クラスを使用して、入力バッファフローをカメラの再処理入力に接続します。空のバッファを取得するには、次のプログラミング モデルに従います。

  1. dequeueInputImage() メソッドを呼び出します。
  2. データを入力バッファに入力します。
  3. 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 とは別に、PackageInstaller API を使用して、アプリのサイレント インストールとアンインストールを行えるようになりました。ユーザーの操作なしでアプリの取得とインストールを行う、デバイス所有者を通じてデバイスをプロビジョニングできるようになりました。この機能は、Google アカウントを有効にしなくても、キオスクなどのデバイスのワンタッチ プロビジョニングを有効にする場合に便利です。
  • 企業証明書へのサイレント アクセス: アプリが choosePrivateKeyAlias() を呼び出すと、ユーザーに証明書の選択を求めるメッセージが表示される前に、プロファイルまたはデバイス所有者は onChoosePrivateKeyAlias() メソッドを呼び出して、リクエスト元のアプリにエイリアスをサイレントで提供できるようになりました。この機能を使用すると、ユーザーの操作なしでマネージド アプリに証明書へのアクセス権を付与できます。
  • システム アップデートの自動適用setSystemUpdatePolicy() でシステム アップデート ポリシーを設定することで、デバイス オーナーはシステム アップデートを自動承認できます(キオスク デバイスの場合など)。また、アップデートを延期して最大 30 日間ユーザーに適用されないようにすることができます。さらに、管理者は、キオスク デバイスが使用されていない時間帯など、アップデートを行う時間帯を毎日設定できます。システム アップデートが利用可能になると、Device Policy Controller アプリがシステム アップデート ポリシーを設定しているかどうかがチェックされ、それに応じて動作します。
  • 証明書のインストールの委任: プロファイルまたはデバイス オーナーは、以下の DevicePolicyManager 証明書管理 API を呼び出す権限をサードパーティ アプリに付与できるようになりました。
  • Android for Work 内の仕事用ステータス通知機能を表示しているモバイル
  • データ使用量のトラッキング。プロファイルやデバイス オーナーは、新しい NetworkStatsManager メソッドを使用して、[設定] > [データ] の使用状況に表示されるデータ使用統計情報を照会できるようになりました。プロファイル所有者には、管理するプロファイルのデータをクエリする権限が自動的に付与されます。一方、デバイス所有者は、管理対象のプライマリ ユーザーの使用状況データにアクセスできます。
  • ランタイム権限の管理:

    プロファイルまたはデバイス オーナーは、setPermissionPolicy() を使用して、すべてのアプリのすべてのランタイム リクエストに対して権限ポリシーを設定し、ユーザーに権限を付与するよう求めるか、暗黙的に権限を自動的に付与または拒否できます。後者のポリシーが設定されている場合、ユーザーは [設定] のアプリの権限画面内でプロファイル所有者やデバイス所有者が行った選択を変更することはできません。

  • 設定での VPN: VPN アプリが [設定] > [その他] > [VPN] に表示されるようになりました。 また、VPN の使用に関する通知は、VPN の構成方法に固有のものになりました。プロファイル オーナーの場合、通知は VPN が管理対象プロファイル、個人用プロファイル、またはその両方で構成されているかによって異なります。デバイス オーナーの場合、通知は VPN がデバイス全体に構成されているかどうかに固有です。
  • 仕事用ステータスの通知: 管理対象プロファイルのアプリのアクティビティがフォアグラウンドにあるときは、ステータスバーのブリーフケース アイコンが表示されるようになりました。さらに、デバイスが管理対象プロファイル内のアプリのアクティビティに対して直接ロック解除されると、ユーザーが仕事用プロファイル内にあることを通知するトーストが表示されます。