1page.title=API の概要
2page.keywords=プレビュー,sdk,互換性
3page.tags=previewresources, androidm sdk.platform.apiLevel=22-mnc
4page.image=images/cards/card-api-overview_16-9_2x.png
5@jd:body
6
7
8
9<div id="qv-wrapper">
10<div id="qv">
11
12<h2>本書の内容
13 <a href="#" onclick="hideNestedItems('#toc44',this);return false;" class="header-toggle">
14        <span class="more">詳細を表示</span>
15        <span class="less" style="display:none">詳細を非表示</span></a></h2>
16
17<ol id="toc44" class="hide-nested">
18  <li><a href="#app-linking">アプリのリンク機能</a></li>
19  <li><a href="#backup">アプリの自動バックアップ</a></li>
20  <li><a href="#authentication">認証</a>
21    <ol>
22      <li><a href="#fingerprint-authentication">指紋認証</a></li>
23      <li><a href="#confirm-credential">資格情報の確認</a></li>
24    </ol>
25  </li>
26  <li><a href="#direct-share">ダイレクト シェア</a></li>
27  <li><a href="#voice-interactions">音声インタラクション</a></li>
28  <li><a href="#assist">Assist API</a></li>
29  <li><a href="#notifications">通知</a></li>
30  <li><a href="#bluetooth-stylus">Bluetooth スタイラスのサポート</a></li>
31  <li><a href="#ble-scanning">Bluetooth Low Energy のスキャンの改善</a></li>
32  <li><a href="#hotspot">アクセス ポイント2.0 リリース 1 のサポート</a></li>
33  <li><a href="#4K-display">4K ディスプレイ モード</a></li>
34  <li><a href="#behavior-themeable-colorstatelists">テーマ化可能な ColorStateLists</a></li>
35  <li><a href="#audio">オーディオ機能</a></li>
36  <li><a href="#video">ビデオ機能</a></li>
37  <li><a href="#camera">カメラ機能</a>
38    <ol>
39      <li><a href="#flashlight">Flashlight API</a></li>
40      <li><a href="#reprocessing">カメラの再処理</a></li>
41    </ol>
42  </li>
43  <li><a href="#afw">Android for Work の機能</a></li>
44</ol>
45
46<h2>API の変更点</h2>
47<ol>
48<li><a href="{@docRoot}preview/download.html">API レベル 22 から M Preview&raquo;</a> </li>
49</ol>
50
51</div>
52</div>
53
54<p>M Developer Preview では、ユーザーやアプリ開発者に Android プラットフォームの次期リリースの新機能をいち早く試していただくことができます。
55
56このドキュメントでは、いくつかの注目すべき API の概要について説明します。</p>
57
58<p>M Developer Preview は、<strong>Developer の早期導入者</strong>と<strong>テスター</strong>を対象としています。
59是非
60<a href="{@docRoot}preview/setup-sdk.html">M Developer Preview を試して</a>フィードバックをご提供ください。あなたのご意見が、Android フレームワークの方向性を決定する上で貴重な情報になります。
61
62</p>
63
64<p class="caution"><strong>注意:</strong> M Developer Preview を使用したアプリは、Google Play ストアには公開しないでください。
65</p>
66
67<p class="note"><strong>注</strong>: このドキュメントには、まだ <a href="{@docRoot}">developer.android.com</a> のリファレンス マテリアルにないクラスやメソッドが多数登場します。
68このドキュメントでは、API エレメントは {@code code style} 形式で記載されています(ハイパーリンクなし)。
69これらのエレメントに関する API ドキュメント(準備段階)については、<a href="{@docRoot}preview/download.html#docs">プレビューのリファレンス</a>をダウンロードしてください。
70</p>
71
72<h3>重要な動作の変更点</h3>
73
74<p>過去に Android にアプリを公開したことがある場合は、アプリがプラットフォームの変更による影響を受ける場合があります。
75</p>
76
77<p>詳細については、<a href="behavior-changes.html">Behavior Changes</a> をご覧ください。</p>
78
79<h2 id="app-linking">アプリのリンク機能</h2>
80<p>このプレビューでは、アプリのリンク機能を強化することで Android のインテント システムが向上しました。この機能では、所有するウェブドメインにアプリを関連付けることができます。
81この関連付けに基づいて、プラットフォームが特定のウェブリンクの処理に使用するデフォルトのアプリを決めることができ、ユーザーにアプリを選択させる操作をスキップできます。この機能の実装方法については、
82<a href="{@docRoot}preview/features/app-linking.html">アプリのリンク機能</a>をご覧ください。
83
84
85
86<h2 id="backup">アプリの自動バックアップ</h2>
87<p>システムで、アプリの自動フルデータ バックアップと復元を実行できるようになりました。この動作は、M Preview を対象としたアプリでデフォルトで有効になっています。追加のコードは必要ありません。
88ユーザーが Google アカウントを削除すると、バックアップ データも削除されます。
89この機能の仕組みとファイル システムでバックアップ対象を設定する方法については、
90<a href="{@docRoot}preview/backup/index.html">アプリの自動バックアップ</a>をご覧ください。
91</p>
92
93<h2 id="authentication">認証</h2>
94<p>このプレビューでは、サポートされる端末での指紋スキャンを使用したユーザー認証や、端末のロック解除メカニズム(ロック画面のパスワードなど)を使って最後にユーザーが認証された時期の確認などを行える新しい API が提供されます。
95
96これらの API は、<a href="{@docRoot}training/articles/keystore.html">Android キーストローク システム</a>と共に使用します。
97</p>
98
99<h3 id="fingerprint-authentication">指紋認証</h3>
100
101<p>指紋スキャンでユーザーを認証するには、新しい
102{@code android.hardware.fingerprint.FingerprintManager} クラスのインスタンスを取得して、
103{@code FingerprintManager.authenticate()} メソッドを呼び出します。アプリは、指紋センサー付きの、互換性のある端末上で実行している必要があります。
104指紋認証フローのユーザー インターフェースをアプリに実装し、UI には標準の Android 指紋アイコンを使用する必要があります。Android 指紋アイコン({@code c_fp_40px.png})は<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">サンプルアプリ</a>に含まれています。指紋認証を使用するアプリを複数開発する場合は、それぞれのアプリで個別にユーザーの指紋を認証する必要があります。
105
106
107
108
109</p>
110
111<p>アプリでこの機能を使用するには、まずマニフェストに {@code USE_FINGERPRINT} パーミッションを追加する必要があります。
112</p>
113
114<pre>
115&lt;uses-permission
116        android:name="android.permission.USE_FINGERPRINT" /&gt;
117</pre>
118
119<img src="{@docRoot}preview/images/fingerprint-screen.png" srcset="{@docRoot}preview/images/fingerprint-screen.png 1x, {@docRoot}preview/images/fingerprint-screen_2x.png 2x" style="float:right; margin:0 0 10px 20px" width="282" height="476" />
120
121<p>アプリでの指紋認証の実装については、
122<a href="https://github.com/googlesamples/android-FingerprintDialog" class="external-link">指紋ダイアログのサンプル</a>をご覧ください。
123</p>
124
125<p>この機能をテストする場合は、次の手順を使用します。</p>
126<ol>
127<li>Android SDK Tools Revision 24.3 をインストールします(まだインストールしていない場合)。</li>
128<li>
129<strong>[設定] &gt; [セキュリティ] &gt; [指紋]</strong> の登録手順に従い、エミュレータに新しい指紋を登録します。</li>
130<li>エミュレータを使って、次のコマンドで指紋のタッチ ベントをエミュレートします。
131同じコマンドを使って、ロック画面やアプリでの指紋のタッチイベントをエミュレートします。
132
133<pre class="no-prettyprint">
134adb -e emu finger touch &lt;finger_id&gt;
135</pre>
136<p>Windows では、{@code telnet 127.0.0.1 &lt;emulator-id&gt;}、
137{@code finger touch &lt;finger_id&gt;} の順に実行する必要がある場合があります。
138</p>
139</li>
140</ol>
141
142<h3 id="confirm-credential">資格情報の確認</h3>
143<p>アプリでは、ユーザーがいつ、最後に端末のロックを解除したかに基づいて、ユーザーを認証できます。この機能によって、ユーザーがアプリ固有のパスワードを覚えたり、開発者が独自の認証ユーザー インターフェースを実装したりする必要性がなくなります。
144
145アプリでこの機能を使用する場合は、ユーザー認証用の公開鍵か秘密鍵を実装する必要があります。
146</p>
147
148<p>ユーザーが正常に認証された後、同じキーを再使用できるタイムアウト期間を設定するには、{@link javax.crypto.KeyGenerator} か
149{@link java.security.KeyPairGenerator} のセットアップ後に新しい
150{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()} メソッドを呼び出します。
151
152現在、この機能は対象暗号化操作で動作します。
153</p>
154
155<p>再認証ダイアログを過度に表示しないようにします。アプリでは、まず暗号オブジェクトを使用し、タイムアウトした場合は
156{@link android.app.KeyguardManager#createConfirmDeviceCredentialIntent(java.lang.CharSequence, java.lang.CharSequence) createConfirmDeviceCredentialIntent()} メソッドを使用してユーザーをアプリ内で再認証するようにします。
157
158
159</p>
160
161<p>アプリでのこの機能の実装については、
162<a href="https://github.com/googlesamples/android-ConfirmCredential" class="external-link">資格情報の確認サンプル</a>をご覧ください。
163</p>
164
165<h2 id="direct-share">ダイレクト シェア</h2>
166
167<img src="{@docRoot}preview/images/direct-share-screen.png" srcset="{@docRoot}preview/images/direct-share-screen.png 1x, {@docRoot}preview/images/direct-share-screen_2x.png 2x" style="float:right; margin:0 0 20px 30px" width="312" height="329" />
168
169<p>このプレビューでは、ユーザーが直感的にすばやく共有できるようにする API が提供されます。アプリで特定のアクティビティを起動する<em>ダイレクト シェアのターゲット</em>を定義すると、それらのダイレクト シェアのターゲットは <em>[共有]</em> メニューに表示されるようになります。
170
171この機能を使うと、他のアプリ内にある連絡先などのターゲットにコンテンツを共有できます。
172たとえば、ダイレクト シェアのターゲットによって他のソーシャル ネットワーク アプリのアクティビティが起動し、そのアプリ内の特定の友人やコミュニティに直接コンテンツを共有できるようになります。
173
174</p>
175
176<p>ダイレクト シェアのターゲットを有効にするには、まず
177{@code android.service.} を拡張するクラスを定義する必要があります。 <br>
178{@code chooser.ChooserTargetService} クラス。マニフェストで
179{@code ChooserTargetService} を宣言します。その宣言内で、
180{@code BIND_CHOOSER_TARGET_SERVICE} パーミッションと、
181{@code SERVICE_INTERFACE} アクションを使ったインテント フィルタを指定します。</p>
182<p>次の例は、マニフェストで {@code ChooserTargetService} を宣言する方法を示しています。
183</p>
184<pre>
185&lt;service android:name=".ChooserTargetService"
186        android:label="&#64;string/service_name"
187        android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"&gt;
188    &lt;intent-filter&gt;
189        &lt;action android:name="android.service.chooser.ChooserTargetService" /&gt;
190    &lt;/intent-filter&gt;
191&lt;/service&gt;
192</pre>
193
194<p>{@code ChooserTargetService} に公開するアクティビティごとに、 {@code "android.service.chooser.chooser_target_service"} という名前の
195{@code &lt;meta-data&gt;} 要素をアプリのマニフェストに追加します。
196
197</p>
198
199<pre>
200&lt;activity android:name=".MyShareActivity”
201        android:label="&#64;string/share_activity_label"&gt;
202    &lt;intent-filter>
203        &lt;action android:name="android.intent.action.SEND" /&gt;
204    &lt;/intent-filter>
205&lt;meta-data
206        android:name="android.service.chooser.chooser_target_service"
207        android:value=".ChooserTargetService" /&gt;
208&lt;/activity>
209</pre>
210
211<h2 id="voice-interactions">音声インタラクション</h2>
212<p>
213このプレビューでは、<a href="https://developers.google.com/voice-actions/" class="external-link">音声アクション</a>と共に使用することでアプリに対話形式の音声操作をビルドできる新しい音声インタラクション API が提供されます。
214
215
216{@code android.app.Activity.isVoiceInteraction()} メソッドを呼び出して、アクティビティが音声アクションへの応答として開始されたかどうかを確認します。
217音声アクションへの応答であった場合、アプリで
218{@code android.app.VoiceInteractor} クラスを使用してユーザーに音声の確認や、オプションのリストからの選択などを要求できます。
219音声アクションの実装の詳細については、
220<a href="https://developers.google.com/voice-actions/interaction/" class="external-link">音声アクションの開発者サイト</a>をご覧ください。
221</p>
222
223<h2 id="assist">Assist API</h2>
224<p>
225このプレビューでは、アシスタントを介してユーザーがアプリを操作できる新しい方法が用意されています。この機能を使用するには、ユーザーが現在のコンテキストを使うようアシスタントを有効にする必要があります。
226有効にすると、<strong>ホーム</strong> ボタンを長押しすることで、すべてのアプリ内でアシスタントを呼び出すことができます。
227</p>
228<p>
229{@link android.view.WindowManager.LayoutParams#FLAG_SECURE} フラグを設定すると、アプリが現在のコンテキストをアシスタントと共有しないようにできます。新しい {@code android.app.Activity.AssistContent} クラスを使用すると、プラットフォームがアシスタントに渡す標準的な情報セットの他に、アプリで追加の情報を共有できます。
230
231</p>
232
233<p>アプリから追加のコンテキストをアシスタントに提供するには、次の手順を使用します。</p>
234
235<ol>
236<li>{@link android.app.Application.OnProvideAssistDataListener} インターフェースを実装します。</li>
237<li>
238{@link android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()} を使用してこのリスナーを登録します。</li>
239<li>アクティビティ固有の文脈情報を提供するには、
240{@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()} コールバックと、任意で新しい
241{@code Activity.onProvideAssistContent()} コールバックをオーバーライドします。
242</ol>
243
244<h2 id="notifications">通知</h2>
245<p>このプレビューでは、通知に関して次のような API の変更点が追加されています。</p>
246<ul>
247  <li>新しい<em>アラームのみの</em> Do not disturb モードに相当する新しい {@code NotificationListenerService.INTERRUPTION_FILTER_ALARMS} フィルタレベル。
248</li>
249  <li>ユーザーが予定したリマインダを他のイベント({@link android.app.Notification#CATEGORY_EVENT})やアラーム({@link android.app.Notification#CATEGORY_ALARM})から区別する際に使用される新しい{@code Notification.CATEGORY_REMINDER} カテゴリの値。
250
251
252</li>
253  <li>{@code Notification.Builder.setSmallIcon(Icon)} メソッドや {@code Notification.Builder.setLargeIcon(Icon)} メソッド経由で通知にアタッチできる新しい {@code android.graphics.drawable.Icon} クラス。
254
255</li>
256  <li>現在どの通知がアクティブなのかをアプリが検出できるようにする新しい {@code NotificationManager.getActiveNotifications()} メソッド。
257この機能を使用するアプリの実装については、<a href="https://github.com/googlesamples/android-ActiveNotifications" class="external-link">アクティブな通知のサンプル</a>をご覧ください。
258</li>
259</ul>
260
261<h2 id="bluetooth-stylus">Bluetooth スタイラスのサポート</h2>
262<p>このプレビューでは、Bluetooth スタイラスを使用したユーザー入力のサポートが強化されました。互換性のある Bluetooth スタイラスと電話やタブレットをペアリングして接続できます。
263接続されている間、タッチスクリーンからの位置情報とスタイラスからの筆圧やボタン情報を合わせることで、タッチスクリーン単独の場合よりも表現の幅が大きく広がります。
264
265新しい
266{@code View.onStylusButtonPressListener} コールバックと {@code GestureDetector.OnStylusButtonPressListener} コールバックをアクティビティに登録すると、スタイラスのボタンが押されたことをアプリがリッスンし、次のアクションを実行できるようになります。
267
268</p>
269
270<p>スタイラスのボタン操作を検出するには、{@link android.view.MotionEvent} メソッドと定数を使用します。
271</p>
272<ul>
273<li>ユーザーがスタイラスでアプリ画面のボタンをタップすると、
274{@link android.view.MotionEvent#getToolType(int) getTooltype()} メソッドが
275{@link android.view.MotionEvent#TOOL_TYPE_STYLUS} を返します。</li>
276<li>M Preview を対象としたアプリでは、ユーザーがプライマリのスタイラス ボタンを押すと
277{@link android.view.MotionEvent#getButtonState() getButtonState()} メソッドが {@code MotionEvent.STYLUS_BUTTON_PRIMARY} を返します。
278
279スタイラスにセカンダリ ボタンがある場合は、ユーザーがそのボタンを押したときに同じメソッドで {@code MotionEvent.STYLUS_BUTTON_SECONDARY} が返されます。
280ユーザーが同時に両方のボタンを押した場合は、両方の値が OR で返されます({@code STYLUS_BUTTON_PRIMARY|STYLUS_BUTTON_SECONDARY})
281
282</li>
283<li>
284以前のプラットフォーム バージョンを対象としたアプリでは、
285{@link android.view.MotionEvent#getButtonState() getButtonState()} メソッドは
286{@link android.view.MotionEvent#BUTTON_SECONDARY}(プライマリのスタイラス ボタンが押されたとき)、
287{@link android.view.MotionEvent#BUTTON_TERTIARY}(セカンダリのスタイラス ボタンが押されたとき)、または両方を返します。
288</li>
289</ul>
290
291<h2 id="ble-scanning">Bluetooth Low Energy のスキャンの改善</h2>
292<p>
293アプリで Bluetooth Low Energy スキャンを実行する場合は、新しい
294{@code android.bluetooth.le.ScanSettings.Builder.setCallbackType()} メソッドを使って、設定された
295{@link android.bluetooth.le.ScanFilter} に一致する宣伝パケットが最初に見つかったときと、それが長期間見つからない場合に通知する目的でのみコールバックが必要であると指定できます。
296
297このスキャン アプローチは、以前のプラットフォーム バージョンで提供されていたものよりもはるかに効率的です。
298
299</p>
300
301<h2 id="hotspot">アクセス ポイント 2.0 リリース 1 のサポート</h2>
302<p>
303このプレビューでは、Nexus 6 と Nexus 9 端末のアクセス ポイント2.0 Release 1 仕様のサポートが追加されました。アクセス ポイント 2.0 の資格情報をアプリに提供するには、
304{@code setPlmn()} や {@code setRealm()} などの
305{@link android.net.wifi.WifiEnterpriseConfig} クラスの新しいメソッドを使用します。
306{@link android.net.wifi.WifiConfiguration} オブジェクトで、
307{@link android.net.wifi.WifiConfiguration#FQDN} フィールドと {@code providerFriendlyName} フィールドを設定できます。新しい {@code ScanResult.PasspointNetwork} プロパティは、検出されたネットワークがアクセス ポイント 2.0 のアクセス ポイントを表しているかどうかを示します。
308
309
310</p>
311
312<h2 id="4K-display">4K ディスプレイ モード</h2>
313<p>互換性のあるハードウェアで、ディスプレイの解像度を 4K レンダリングにアップグレードするようアプリから要求できるようになりました。
314現在の物理的解像度を照会するには、新しい
315{@code android.view.Display.Mode} API を使用します。UI が低い論理的解像度で描画されていて、より高い物理的解像度にアップスケールされた場合は、
316{@code Display.Mode.getPhysicalWidth()} メソッドが返す物理的解像度が {@link android.view.Display#getSize(android.graphics.Point) getSize()} で報告される論理的解像度と異なる場合があります。
317
318</p>
319
320<p>アプリ ウィンドウの
321{@code WindowManager.LayoutParams.preferredDisplayModeId} プロパティを設定することで、アプリの実行時に物理的解像度を変更するようシステムに要求できます。この機能は、4K ディスプレイの解像度に切り替えたい場合に便利です。
3224K ディスプレイ モード中、UI は引き続き元の解像度(1080p など)で表示され、4K にアップスケールされますが、
323{@link android.view.SurfaceView} オブジェクトではコンテンツをネイティブの解像度で表示する場合があります。
324</p>
325
326<h2 id="behavior-themeable-colorstatelists">テーマ化可能な ColorStateLists</h2>
327<p>M Preview を実行する端末で、テーマの属性が
328{@link android.content.res.ColorStateList} でサポートされるようになりました。
329{@link android.content.res.Resources#getColorStateList(int) getColorStateList()} メソッドと
330{@link android.content.res.Resources#getColor(int) getColor()} メソッドは廃止されました。これらの API を呼び出す場合は、代わりに新しい {@code Context.getColorStateList()} メソッドか
331{@code Context.getColor()} メソッドを呼び出します。
332これらのメソッドは、{@link android.support.v4.content.ContextCompat} の v4 appcompat ライブラリにもあります。
333</p>
334
335<h2 id="audio">オーディオ機能</h2>
336
337<p>このプレビューでは、次のように Android でのオーディオ処理が改善されました。 </p>
338<ul>
339  <li>新しい {@code android.media.midi} API を使った <a href="http://en.wikipedia.org/wiki/MIDI" class="external-link">MIDI</a> プロトコルのサポート。
340これらの API を使用して MIDI イベントを送受信できます。
341</li>
342  <li>デジタル オーディオの録音を作成して、それぞれのオブジェクトを再生し、システムのデフォルトをオーバーライドするオーディオ ソースとシンク プロパティを構成するための新しい {@code android.media.AudioRecord.Builder} クラスと {@code android.media.AudioTrack.Builder} クラス
343
344。</li>
345  <li>オーディオと入力端末を関連付ける API フック。これは、ユーザーが Android TV に接続されているゲーム コントローラーやリモート コントロールから音声検索を開始できるアプリの場合に特に便利です。ユーザーが検索を開始すると、システムが新しい
346{@code android.app.Activity.onSearchRequested()} コールバックを呼び出します。
347
348ユーザーの入力端末に組み込みのマイクがあるかどうかを確認するには、そのコールバックから {@link android.view.InputDevice} オブジェクトを取得して、新しい
349{@code InputDevice.hasMic()} メソッドを呼び出します。
350</li>
351  <li>アタッチされたすべてのソースとシンク オーディオ端末の一覧を取得できる新しい {@code android.media.AudioDevicesManager} クラス。
352また、オーディオ端末の接続時と接続解除時にアプリで通知を受けたい場合は、
353{@code android.media.OnAudioDeviceConnectionListener} オブジェクトを指定することもできます。
354</li>
355</ul>
356
357<h2 id="video">ビデオ機能</h2>
358<p>このプレビューでは、ビデオ処理の API に次のような新機能が追加されました。</p>
359<ul>
360<li>アプリでオーディオ ストリームとビデオ ストリームを同調してレンダリングできる新しい {@code android.media.MediaSync}。
361オーディオ バッファはノンブロッキング方式で送信され、コールバック経由で返されます。
362ダイナミック再生レートもサポートしています。
363</li>
364<li>アプリで開かれたセッションが、リソース マネージャーによって再要求されたことを示す新しい {@code MediaDrm.EVENT_SESSION_RECLAIMED} イベント。
365アプリが DRM セッションを使用する場合は、必ずこのイベントを処理し、再要求されたセッションは使用しないようにします。
366
367</li>
368<li>リソース マネージャーがコーデックで使用されたメディア リソースを再要求したことを示す新しい {@code MediaCodec.CodecException.ERROR_RECLAIMED} エラーコード。
369この例外では、コーデックはターミナル状態に移動するため、解放する必要があります。
370
371</li>
372<li>同時に発生できるコーデック インスタンスの最大数のヒントを得られる新しい {@code MediaCodecInfo.CodecCapabilities.getMaxSupportedInstances()} インターフェース。
373
374</li>
375<li>高速または低速モーション再生におけるメディアの再生レートを設定する新しい {@code MediaPlayer.setPlaybackParams()} メソッド。
376ビデオと共にオーディオの再生を自動的に延ばしたり早めたりもします。
377</li>
378</ul>
379
380<h2 id="camera">カメラ機能</h2>
381<p>このプレビューでは、カメラのフラッシュやカメラによる画像の再処理にアクセスするための新しい API が用意されています。
382</p>
383
384<h3 id="flashlight">Flashlight API</h3>
385<p>カメラ端末にフラッシュ ユニットが付属している場合は、{@code CameraManager.setTorchMode()} メソッドを呼び出すことで、カメラ端末を開かずにフラッシュ ユニットのタッチモードのオン/オフを切り替えることができます。
386アプリには、フラッシュ ユニットやカメラ端末のフラッシュの独占所有権はありません。
387トーチモードは、カメラ端末が利用不可になったときや、トーチを付けている他のカメラリソースが利用不可になったときにオフになり、利用できなくなります。
388
389他のアプリでも {@code setTorchMode()} を呼び出してトーチモードをオフにできます。
390最後にトーチモードをオンにしたアプリが閉じられると、トーチモードはオフになります。
391</p>
392
393<p>
394{@code CameraManager.registerTorchCallback()} メソッドを呼び出すことで、トーチモードの状態に関する通知を受けるようコールバックを登録できます。コールバックを初めて登録したときに、現在検知されているすべてのフラッシュ ユニット付きのカメラ端末のトーチモードの状態が即座に呼び出されます。
395
396トーチモードが正常にオン/オフされると、
397{@code CameraManager.TorchCallback.onTorchModeChanged()} メソッドが呼び出されます。</p>
398
399<h3 id="reprocessing">Reprocessing API</h3>
400<p>{@link android.hardware.camera2 Camera2} API は、YUV とプライベートな不透明形式の画像の再処理をサポートするよう拡張されました。
401アプリは、再処理機能が利用可能かどうかを {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES} 経由で確認します。
402端末が再処理をサポートしている場合は、
403{@code CameraDevice.createReprocessableCaptureSession()} を呼び出して再処理可能なカメラ撮影セッションを作成し、入力バッファの再処理の要求を作成できます。
404
405</p>
406
407<p>入力バッファのフローをカメラの再処理入力に接続するには、{@code ImageWriter} クラスを使用します。
408空のバッファを取得するには、次のプログラミング モデルを使用します。</p>
409
410<ol>
411<li>{@code ImageWriter.dequeueInputImage()} メソッドを呼び出します。</li>
412<li>入力バッファにデータを入力します。</li>
413<li>{@code ImageWriter.queueInputImage()} メソッドを呼び出して、バッファをカメラに送ります。</li>
414</ol>
415
416<p>{@code ImageWriter} オブジェクトを
417{@code android.graphics.ImageFormat.PRIVATE} 画像と共に使用する場合、アプリから直接画像データにアクセスすることはできません。
418代わりに、{@code ImageWriter.queueInputImage()} メソッドをバッファコピーなしで呼び出して、{@code ImageFormat.PRIVATE} 画像を直接
419{@code ImageWriter} に渡します。
420</p>
421
422<p>{@code ImageReader} クラスで {@code android.graphics.ImageFormat.PRIVATE} 形式の画像ストリームがサポートされるようになりました。
423これにより、アプリが
424{@code ImageReader} 出力画像の循環的な画像のキューを維持でき、1 つ以上の画像を選択して、それらをカメラの再処理用に
425{@code ImageWriter} に送ることができます。</p>
426
427<h2 id="afw">Android for Work の機能</h2>
428<p>このプレビューには、次のような Android for Work 用の新しい API が含まれています。</p>
429<ul>
430  <li><strong>企業の専用端末の制御の強化:</strong>デバイス オーナーは次の設定を制御でき、企業の専用端末を管理しやすくなります。
431
432
433  <ul>
434    <li>
435{@code DevicePolicyManager.setKeyguardEnabledState()} メソッドを使ったキーガードの無効化と有効化。</li>
436    <li>
437{@code DevicePolicyManager.setStatusBarEnabledState()} メソッドを使ったステータスバー(クイック設定、通知、Google Now を起動するスワイプアップのジェスチャ)の無効化と有効化。
438</li>
439    <li>{@link android.os.UserManager} の定数 {@code DISALLOW_SAFE_BOOT} を使ったセーフブートの無効化と有効化。
440</li>
441    <li>
442{@link android.provider.Settings.Global} の定数 {@code STAY_ON_WHILE_PLUGGED_IN} を使った電源接続時の画面オフの回避。</li>
443  </ul>
444  </li>
445  <li><strong>デバイス オーナーによるアプリのサイレント インストールとアンインストール:</strong>デバイス オーナーでは、{@link android.content.pm.PackageInstaller} API を使って、Google Play for Work から独立してアプリケーションをサイレントにインストール、アンインストールできます。
446
447デバイス オーナー経由で、ユーザー操作なしでアプリを取得したりインストールしたりできる端末を提供できます。
448この機能は、Google アカウントのアクティベートなしでキオスクや同様の端末のワンタッチ プロビジョニングを有効にする際に便利です。
449</li>
450<li><strong>企業証明書のサイレント アクセス: </strong>ユーザーが証明書の選択を求められる前にアプリが
451{@link android.security.KeyChain#choosePrivateKeyAlias(android.app.Activity,android.security.KeyChainAliasCallback,java.lang.String[],java.security.Principal[],java.lang.String,int,java.lang.String) choosePrivateKeyAlias()} を呼び出すと、プロファイルやデバイス オーナーが {@code DeviceAdminReceiver.onChoosePrivateKeyAlias()} メソッドを呼び出して要求元のアプリケーションにエイリアスをサイレントに提供できるようになりました。
452
453
454この機能によって、ユーザー操作なしでマネージド アプリが証明書にアクセスできるようになります。
455</li>
456<li><strong>システムアップデートの自動受信。</strong>
457{@code DevicePolicyManager.setSystemUpdatePolicy()} を使ってシステムアップデートのポリシーを設定することで、デバイス オーナーがキオスク端末などでシステムアップデートを自動的に受信できるようにしたり、ユーザーが操作しないようアップデートを最大 30 日間保留したりできます。
458
459さらに、管理者はアップデートを実行する時間枠を、キオスク端末が使用されていない時間帯などに設定できます。
460利用可能なシステムアップデートがある場合、システムは Work Policy Controller アプリにシステムアップデートのポリシーがあるかどうかを確認し、それに基づいて動作します。
461
462
463</li>
464<li>
465<strong>代理証明書のインストール:</strong>プロファイルやデバイス オーナーで、サードパーティ アプリが次の {@link android.app.admin.DevicePolicyManager} 証明書の管理 API を呼び出す権限を付与できるようになりました。
466
467
468<ul>
469  <li>{@link android.app.admin.DevicePolicyManager#getInstalledCaCerts(android.content.ComponentName)
470getInstalledCaCerts()}</li>
471  <li>{@link android.app.admin.DevicePolicyManager#hasCaCertInstalled(android.content.ComponentName,byte[])
472hasCaCertInstalled()}</li>
473  <li>{@link android.app.admin.DevicePolicyManager#installCaCert(android.content.ComponentName,byte[])
474installCaCert()}</li>
475  <li>{@link android.app.admin.DevicePolicyManager#uninstallCaCert(android.content.ComponentName,byte[])
476uninstallCaCert()}</li>
477  <li>{@link android.app.admin.DevicePolicyManager#uninstallAllUserCaCerts(android.content.ComponentName)
478uninstallAllUserCaCerts()}</li>
479  <li>{@link android.app.admin.DevicePolicyManager#installKeyPair(android.content.ComponentName,java.security.PrivateKey,java.security.cert.Certificate,java.lang.String)
480installKeyPair()}</li>
481</ul>
482</li>
483<li><strong>企業のファクトリー リセット制限:</strong>デバイス オーナーをプロビジョニングする際、
484{@code DeviceManagerPolicy.EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS} バンドルを設定して、ファクトリー リセット保護(FRP)をロック解除するようパラメータを構成できます。
485NFC プログラマー アプリでは、端末が FRP のロック解除するようリセットされ、端末がプロビジョニングされた後にこれらのパラメータを提供でき、事前に Google アカウントを設定しておく必要はありません。
486
487これらのパラメータを修正しない場合、FRP は続行し、事前にアクティブ化された Google の資格情報なしで端末がアクティベートされないようにします。
488
489
490<p>さらに、Google Play サービスでアプリの制限を設定することで、デバイス オーナーは FRP のロック解除用の別の Google アカウントを指定して、端末でアクティベートされたアカウントを置き換えることができます。
491</p>
492</li>
493<img src="{@docRoot}preview/images/work-profile-screen.png" srcset="{@docRoot}preview/images/work-profile-screen.png 1x, {@docRoot}preview/images/work-profile-screen_2x.png 2x" style="float:right; margin:0 0 10px 20px" width="282" height="476" />
494<li><strong>データ使用のトラッキング</strong>プロファイルやデバイス オーナーでは、新しい
495{@code android.app.usage.NetworkStatsManager} メソッドを使用して、<strong>[設定] &gt; [データ]</strong> に表示されるデータ使用の統計を照会できます。
496プロファイル オーナーには、管理するプロファイルのデータを照会するパーミッションが自動的に付与され、デバイス オーナーは管理されたプライマリ ユーザーの使用データへのアクセス権が付与されます。
497
498</li>
499<li><strong>実行時パーミッションの管理:</strong>
500<p>プロファイルやデバイス オーナーは、
501{@code DevicePolicyManager.setPermissionPolicy()} を使用するすべてのアプリケーションのすべての実行時の要求に対するパーミッション ポリシーを設定でき、通常のとおりユーザーにパーミッションを付与するよう要求する、自動的に付与する、パーミッションをサイレントに拒否する、のいずれかを行うことができます。
502
503後者のポリシーが設定されている場合、ユーザーはプロファイルやデバイス オーナーによって選択された内容を <strong>[設定]</strong> にあるアプリのパーミッション画面で修正できません。
504
505</p></li>
506<li><strong>設定の VPN:</strong>VPN アプリは、<strong>[設定] &gt; [その他] &gt; [VPN]</strong> に表示されます。さらに、VPN の使用に関する通知は、その VPN の構成状況によるものになります。
507
508
509プロファイル オーナーの場合、通知は VPN が マネージド プロファイル、個人プロファイル、または両方のどれに構成されているかによって、それ固有のものになります。
510デバイス オーナーの場合、通知は VPN が端末全体に構成されているかどうかによって、それ固有のものになります。
511</li>
512<li><strong>ワーク ステータスの通知:</strong>マネージド プロファイルからのアプリのアクティビティがフォアグラウンドにある場合は、ステータスバーのブリーフケース アイコンが表示されます。
513さらに、端末がマネージド プロファイルのアプリのアクティビティに直接ロック解除されている場合、ユーザーがワーク プロファイル内にいることがトースト通知で表示されます。
514
515
516</li>
517</ul>
518
519<p class="note">
520  M Developer Preview のすべての API の変更点の詳細については、<a href="{@docRoot}preview/download.html">API Differences Report</a> をご覧ください。
521</p>
522