Android Wear Notificationから音声入力を受信する

2014/3/21 5768hit

お知らせ
このセッションは開発者プレビューのための古い情報です。正式版については
ウェアラブル向けアプリを作る 目次を見てください

目次

Android Wear
Android Wear Developer Previewを始めよう
Android Wear UI概要
Android Wear デザイン原則
Android WearのためのNotificationを作る
>Android Wear Notificationから音声入力を受信する
Android Wear NotificationにPagesを追加する
Android Wear NotificationをStackする
Android Wear Notificationリファレンス(英語)
ライセンス規約(英語)

原文

Android Wear Notificationから音声入力を受信する

Notificationがemailへの返信などテキストを使った応答アクションを含むなら
普通は携帯デバイス上でActivityを開始しないといけませんでした。しかし、NotificationがAndroidウェアラブル上で表示される場合、音声入力でユーザーが直接返信できるように出来ます。ユーザーが選択できるように事前定義済みのテキストメッセージを提供することも出来ます。

ユーザーが音声または使用可能なメッセージを選択して返信を行った場合システムは接続された携帯デバイスのアプリにメッセージを送ります。
メッセージはnotification actionで指定したIntentのextraとしてメッセージにアタッチされます。

ノート:Androidエミュレータで開発を行ったいるときは
音声入力フィールドにキーボードでテキストをタイピングしないといけません。
そのため、AVD設定にHadware keyboard presentを有効にしないといけません。


Remote Inputを定義する

音声入力対応を行うために、まずはじめにRemoteInput.BuilderAPIを使ってRemoteInputのインスタンスを作ります。
RemoteInput.BuilderのコンストラクタにシステムがIntent extraで返信メッセージを携帯上のアプリに渡す時に使うことになるキーのString型を渡します。

例:これは音声入力promptのためにカスタムラベルを提供するRemoteInputオブジェクトの作りかたタです。

//アクションがIntent内で届けるkeyとなるString
private static final String EXTRA_VOICE_REPLY = "extra_voice_reply";

String replyLabel = getResources().getString(R.string.reply_label);

RemoteInput remoteInput = new RemoteInput.Builder(EXTRA_VOICE_REPLY)
.setLabel(replyLabel)
.build();


事前定義済みのテキスト応答

音声入力に加えて、最大5つのテキスト応答を提供できます。
それによりユーザーは素早く応答を返すことが出来ますsetChoice()を読んでStringのArrayを渡してください。
res/values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="reply_choices">
<item>Yes</item>
<item>No</item>
<item>Maybe</item>
</string-array>
</resources>

String arrayをインフレートしRemoteInputに加えます

String replyLabel = getResources().getString(R.string.reply_label);
String[] replyChoices = getResources().getStringArray(R.array.reply_choices);

RemoteInput remoteInput = new RemoteInput.Builder(EXTRA_VOICE_REPLY)
.setLabel(replyLabel)
.setChoices(replyChoices)
.build();



プライマリアクションのために音声入力受信する

もし、(setContentIntent()メソッドで定義される)「Reply」があなたのNotificationのプライマリアクションだったら、
addRemoteInputForContentIntent()を使用してRemoteInputをメインアクションにアタッチする必要があります。
例:

// reply actionを作る
Intent replyIntent = new Intent(this, ReplyActivity.class);
PendingIntent replyPendingIntent =
PendingIntent.getActivity(this, 0, replyIntent, 0);

// notificationを構築する
NotificationCompat.Builder replyNotificationBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_new_message)
.setContentTitle("Message from Travis")
.setContentText("I love key lime pie!")
.setContentIntent(replyPendingIntent);

// remote inputを作る
RemoteInput remoteInput = new RemoteInput.Builder(EXTRA_VOICE_REPLY)
.setLabel(replyLabel)
.build();

// Create wearable notification and add remote input
Notification replyNotification =
new WearableNotifications.Builder(replyNotificationBuilder)
.addRemoteInputForContentIntent(replyAction)
.build();


addRemoteInputForContentIntent()を使用して、RemoteInputオブジェクトをNotificationのプライマリアクションに追加するとき、「Open」アクションは「Reply」アクションとなりユーザーがAndroidWear上で選ぶと音声入力UIが開始されます。

セカンダリアクションとして音声入力を受信する

もし、「Reply」がプライマリアクションではなく、セカンダリアクションとして音声入力を有効にしたい場合、RemoteInputActionオブジェクトで定義されるボタンに追加します。

Action.Builder()コンストラクタでActionをインスタンス化し、アクションボタンのためのアイコン、テキストラベルに加えて、ユーザーがアクションを選んだときに呼び出されるPendingIntentを渡す必要があります。
例:

// ユーザーがアクションを選択したときに発行されるPending intentを作る
Intent replyIntent = new Intent(this, ReplyActivity.class);
PendingIntent pendingReplyIntent = PendingIntent.getActivity(this, 0, replyIntent, 0);

// remote inputを作る
RemoteInput remoteInput = new RemoteInput.Builder(EXTRA_VOICE_REPLY)
.setLabel(replyLabel)
.build();

// Notification アクションを作る
Action replyAction = new Action.Builder(R.drawable.ic_message,
"Reply", pendingIntent)
.addRemoteInput(remoteInput)
.build();

ActionRemoteInputを追加したら、WearableNotification.BuilderaddAction()をつかってActionを追加します。
例:

// 標準のnotification builderを作る
NotificationCompat.Builder replyNotificationBuilder =
new NotificationCompat.Builder(this)
.setContentTitle("New message");

// notificationアクションを作りremote inputを加える
Action replyAction = new Action.Builder(R.drawable.ic_message,
"Reply", pendingIntent)
.addRemoteInput(remoteInput)
.build();

// wearable notificationを作りactionを加える
Notification replyNotification =
new WearableNotifications.Builder(replyNotificationBuilder)
.addAction(replyAction)
.build();

これで、Androidウェアラブルでユーザーが「Reply」を選ぶと、システムは音声入力(と提供されているなら事前定義済みの返答リスト)を表示します。
システムは、ユーザーが応答を完了したらユーザーのメッセージが入ったString valueを持つ「EXTRA_VOICE_REPLAY」(この文字列はRemoteInput.Builderコンストラクタであなたが渡した物になります)extraを追加したアクションがアタッチされたIntentを発行します。



Except as noted, this content is licensed under Creative Commons Attribution 2.5. For details and restrictions, see the Content License

前:Android WearのためのNotificationを作る 次:Android Wear NotificationにPagesを追加する

関連キーワード

[Android][Java][モバイル][IT][翻訳][ウェアラブル]

コメントを投稿する

名前URI
コメント