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 の動画をご覧ください。
この機能をテストする場合は、次の操作を行います。
- 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 アカウントを削除すると、バックアップ データも削除されます。この機能の仕組みと、ファイル システムでバックアップする対象を設定する方法については、アプリの自動バックアップの設定をご覧ください。
直接共有
このリリースでは、ユーザーが直感的かつすばやく共有できるようにするための 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
クラスを使用して追加情報を共有できます。
アプリから追加のコンテキストをアシスタントに提供するには、次の手順を行います。
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_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
クラスを使用して、入力バッファフローをカメラの再処理入力に接続します。空のバッファを取得するには、次のプログラミング モデルに従います。
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 とは別に、
PackageInstaller
API を使用して、アプリのサイレント インストールとアンインストールを行えるようになりました。ユーザーの操作なしでアプリの取得とインストールを行う、デバイス所有者を通じてデバイスをプロビジョニングできるようになりました。この機能は、Google アカウントを有効にしなくても、キオスクなどのデバイスのワンタッチ プロビジョニングを有効にする場合に便利です。 - 企業証明書へのサイレント アクセス: アプリが
choosePrivateKeyAlias()
を呼び出すと、ユーザーに証明書の選択を求めるメッセージが表示される前に、プロファイルまたはデバイス所有者はonChoosePrivateKeyAlias()
メソッドを呼び出して、リクエスト元のアプリにエイリアスをサイレントで提供できるようになりました。この機能を使用すると、ユーザーの操作なしでマネージド アプリに証明書へのアクセス権を付与できます。 - システム アップデートの自動適用。
setSystemUpdatePolicy()
でシステム アップデート ポリシーを設定することで、デバイス オーナーはシステム アップデートを自動承認できます(キオスク デバイスの場合など)。また、アップデートを延期して最大 30 日間ユーザーに適用されないようにすることができます。さらに、管理者は、キオスク デバイスが使用されていない時間帯など、アップデートを行う時間帯を毎日設定できます。システム アップデートが利用可能になると、Device Policy Controller アプリがシステム アップデート ポリシーを設定しているかどうかがチェックされ、それに応じて動作します。 -
証明書のインストールの委任: プロファイルまたはデバイス オーナーは、以下の
DevicePolicyManager
証明書管理 API を呼び出す権限をサードパーティ アプリに付与できるようになりました。 - データ使用量のトラッキング。プロファイルやデバイス オーナーは、新しい
NetworkStatsManager
メソッドを使用して、[設定] > [データ] の使用状況に表示されるデータ使用統計情報を照会できるようになりました。プロファイル所有者には、管理するプロファイルのデータをクエリする権限が自動的に付与されます。一方、デバイス所有者は、管理対象のプライマリ ユーザーの使用状況データにアクセスできます。 - ランタイム権限の管理:
プロファイルまたはデバイス オーナーは、
setPermissionPolicy()
を使用して、すべてのアプリのすべてのランタイム リクエストに対して権限ポリシーを設定し、ユーザーに権限を付与するよう求めるか、暗黙的に権限を自動的に付与または拒否できます。後者のポリシーが設定されている場合、ユーザーは [設定] のアプリの権限画面内でプロファイル所有者やデバイス所有者が行った選択を変更することはできません。 - 設定での VPN: VPN アプリが [設定] > [その他] > [VPN] に表示されるようになりました。 また、VPN の使用に関する通知は、VPN の構成方法に固有のものになりました。プロファイル オーナーの場合、通知は VPN が管理対象プロファイル、個人用プロファイル、またはその両方で構成されているかによって異なります。デバイス オーナーの場合、通知は VPN がデバイス全体に構成されているかどうかに固有です。
- 仕事用ステータスの通知: 管理対象プロファイルのアプリのアクティビティがフォアグラウンドにあるときは、ステータスバーのブリーフケース アイコンが表示されるようになりました。さらに、デバイスが管理対象プロファイル内のアプリのアクティビティに対して直接ロック解除されると、ユーザーが仕事用プロファイル内にあることを通知するトーストが表示されます。