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 を返します。アプリは、この操作が意図したものであることを確認するようユーザーに求めることができます。

音声操作の実装について詳しくは、音声操作のデベロッパー サイトをご覧ください。

アシスト 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_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 に一致するアドバタイズ パケットを最初に検出したとき、または後で確認したときに、コールバックを通知するように指定します。このスキャン アプローチは、以前のプラットフォーム バージョンで提供されていたものよりも電力効率が良くなっています。

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

このリリースでは、Nexus 6 および Nexus 9 デバイスにおけるアクセス ポイント 2.0 リリース 1 仕様のサポートが追加されました。アクセス ポイント 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 プロトコルのサポート。これらの 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

カメラデバイスにフラッシュ ユニットがある場合は、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 がデバイス全体に構成されているかどうかに固有のものです。
  • ワーク ステータスの通知: 管理対象プロファイルのアプリのアクティビティがフォアグラウンドにある場合は、ステータスバーのブリーフケース アイコンが表示されるようになりました。さらに、デバイスが管理対象プロファイル内のアプリのアクティビティに対して直接ロック解除されると、仕事用プロファイル内にいることをユーザーに知らせるトーストが表示されます。