diff options
Diffstat (limited to 'docs/html/wear/notifications/remote-input.html')
-rw-r--r-- | docs/html/wear/notifications/remote-input.html | 652 |
1 files changed, 0 insertions, 652 deletions
diff --git a/docs/html/wear/notifications/remote-input.html b/docs/html/wear/notifications/remote-input.html deleted file mode 100644 index c8f6621..0000000 --- a/docs/html/wear/notifications/remote-input.html +++ /dev/null @@ -1,652 +0,0 @@ -<!DOCTYPE html> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<html> -<head> - - -<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="viewport" content="width=device-width" /> - -<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" /> -<title>Receiving Voice Input from a Notification | Android Developers</title> - -<!-- STYLESHEETS --> -<link rel="stylesheet" -href="//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold" title="roboto"> -<link href="/assets/css/default.css" rel="stylesheet" type="text/css"> - - - -<!-- JAVASCRIPT --> -<script src="//www.google.com/jsapi" type="text/javascript"></script> -<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script> -<script type="text/javascript"> - var toRoot = "/"; - var metaTags = []; - var devsite = false; -</script> -<script src="/assets/js/docs.js" type="text/javascript"></script> - -<script type="text/javascript"> - var _gaq = _gaq || []; - _gaq.push(['_setAccount', 'UA-5831155-1']); - _gaq.push(['_trackPageview']); - - (function() { - var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; - ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); - })(); -</script> -</head> - -<body class="gc-documentation - " itemscope itemtype="http://schema.org/Article"> - - - -<a name="top"></a> - - <!-- Header --> - <div id="header"> - <div class="wrap" id="header-wrap"> - <div class="col-3 logo-wear"> - <a href="/wear/index.html"> - <img src="/wear/images/android-wear.png" height="16" alt="Android Wear" /> - </a> - </div> - - - <div class="col-8" style="margin:0"><h1 style="margin:1px 0 0 20px;padding:0;line-height:16px; - color:#666;font-weight:100;font-size:24px;">Developer Preview</h1></div> - - - <!-- New Search --> - <div class="menu-container"> - <div class="moremenu"> - <div id="more-btn"></div> - </div> - <div class="morehover" id="moremenu"> - <div class="top"></div> - <div class="mid"> - <div class="header">Links</div> - <ul> - <li><a href="https://play.google.com/apps/publish/">Google Play Developer Console</a></li> - <li><a href="http://android-developers.blogspot.com/">Android Developers Blog</a></li> - <li><a href="/about/index.html">About Android</a></li> - </ul> - <div class="header">Android Sites</div> - <ul> - <li><a href="http://www.android.com">Android.com</a></li> - <li class="active"><a>Android Developers</a></li> - <li><a href="http://source.android.com">Android Open Source Project</a></li> - </ul> - - - - <div class="header">Language</div> - <div id="language" class="locales"> - <select name="language" onChange="changeLangPref(this.value, true)"> - <option value="en">English</option> - <option value="es">Español</option> - <option value="ja">日本語</option> - <option value="ko">한국어</option> - <option value="ru">Русский</option> - <option value="zh-cn">中文 (中国)</option> - <option value="zh-tw">中文 (台灣)</option> - </select> - </div> - <script type="text/javascript"> - <!-- - loadLangPref(); - //--> - </script> - - - - - <br class="clearfix" /> - </div><!-- end mid --> - <div class="bottom"></div> - </div><!-- end morehover --> - - <div class="search" id="search-container"> - <div class="search-inner"> - <div id="search-btn"></div> - <div class="left"></div> - <form onsubmit="return submit_search()"> - <input id="search_autocomplete" type="text" value="" autocomplete="off" name="q" -onfocus="search_focus_changed(this, true)" onblur="search_focus_changed(this, false)" -onkeydown="return search_changed(event, true, '/')" -onkeyup="return search_changed(event, false, '/')" /> - </form> - <div class="right"></div> - <a class="close hide">close</a> - <div class="left"></div> - <div class="right"></div> - </div> - </div><!-- end search --> - - <div class="search_filtered_wrapper reference"> - <div class="suggest-card reference no-display"> - <ul class="search_filtered"> - </ul> - </div> - </div> - - <div class="search_filtered_wrapper docs"> - <div class="suggest-card dummy no-display"> </div> - <div class="suggest-card develop no-display"> - <ul class="search_filtered"> - </ul> - <div class="child-card guides no-display"> - </div> - <div class="child-card training no-display"> - </div> - <div class="child-card samples no-display"> - </div> - </div> - <div class="suggest-card design no-display"> - <ul class="search_filtered"> - </ul> - </div> - <div class="suggest-card distribute no-display"> - <ul class="search_filtered"> - </ul> - </div> - </div><!-- end search_filtered_wrapper --> - - </div> - <!-- end menu_container --> - - - </div><!-- end header-wrap --> - </div> - <!-- /Header --> - - - <div id="searchResults" class="wrap" style="display:none;"> - <h2 id="searchTitle">Results</h2> - <div id="leftSearchControl" class="search-control">Loading...</div> - </div> - - - - - - <div class="wrap clearfix" id="body-content"> - <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement"> - <div id="devdoc-nav" class="scroll-pane"> -<a class="totop" href="#top" data-g-event="left-nav-top">to top</a> - -<ul id="nav"> - - <li class="nav-section"> - <div class="nav-section-header empty"><a href="/wear/preview/start.html">Get Started - </a></div> - </li> - - <li class="nav-section"> - <div class="nav-section-header empty"><a href="/wear/design/user-interface.html">UI Overview - </a></div> - </li> - - <li class="nav-section"> - <div class="nav-section-header empty"><a href="/wear/design/index.html">Design Principles - </a></div> - </li> - - <li class="nav-section"> - <div class="nav-section-header empty"><a href="/wear/notifications/creating.html">Creating Notifications for Android Wear - </a></div> - </li> - - <li class="nav-section"> - <div class="nav-section-header empty"><a href="/wear/notifications/remote-input.html">Receiving Voice Input from a Notification - </a></div> - </li> - - <li class="nav-section"> - <div class="nav-section-header empty"><a href="/wear/notifications/pages.html">Adding Pages to a Notification - </a></div> - </li> - - <li class="nav-section"> - <div class="nav-section-header empty"><a href="/wear/notifications/stacks.html">Stacking Notifications - </a></div> - </li> - - <li class="nav-section"> - <div class="nav-section-header"><a href="/reference/android/preview/support/package-summary.html">Notification Reference</a></div> - <ul class="tree-list-children"> -<li class="nav-section"> -<div class="nav-section-header-ref"><span class="tree-list-subtitle package" title="android.preview.support.v4.app">android.preview.support.v4.app</span></div> - <ul> -<li><a href="/reference/android/preview/support/v4/app/NotificationManagerCompat.html">NotificationManagerCompat</a></li> - </ul> -</li> - -<li class="nav-section"> -<div class="nav-section-header-ref"><span class="tree-list-subtitle package" title="android.preview.support.wearable.notifications">android.preview.support.wearable.notifications</span></div> -<ul> - -<li><a href="/reference/android/preview/support/wearable/notifications/RemoteInput.html">RemoteInput</a></li> -<li><a href="/reference/android/preview/support/wearable/notifications/RemoteInput.Builder.html" >RemoteInput.Builder</a></li> - -<li><a href="/reference/android/preview/support/wearable/notifications/WearableNotifications.html">WearableNotifications</a></li> - -<li><a href="/reference/android/preview/support/wearable/notifications/WearableNotifications.Action.html">WearableNotifications.Action</a></li> - -<li><a href="/reference/android/preview/support/wearable/notifications/WearableNotifications.Action.Builder.html">WearableNotifications.Action.Builder</a></li> - -<li><a href="/reference/android/preview/support/wearable/notifications/WearableNotifications.Builder.html">WearableNotifications.Builder</a></li> - </ul> - </li> -</ul> -</li> - - - - <li class="nav-section"> - <div class="nav-section-header empty"><a href="/wear/license.html">License Agreement</a></div> - </li> - - -</ul> - - - - </div> - </div> <!-- end side-nav --> - <script> - $(document).ready(function() { - scrollIntoView("devdoc-nav"); - }); - </script> - - - - -<div class="col-12" id="doc-col" > - - - - - - <h1 itemprop="name" >Receiving Voice Input from a Notification</h1> - - - - - - - <div id="jd-content"> - - - <div class="jd-descr" itemprop="articleBody"> - <img src="/wear/images/13_voicereply.png" height="200" width="169" style="float:right;margin:0 0 20px 40px" /> - -<img src="/wear/images/03_actions.png" height="200" width="169" style="float:right;margin:0 0 20px 40px" /> - -<p>If your notification includes an action to respond with text, - such as to reply to an email, it should normally launch an activity - on the handheld device. However, when your notification appears on an Android wearable, you can - allow users to dictate a reply with voice input. You can also provide pre-defined text - messages for the user to select.</p> - -<p>When the user replies with voice or selects one of the available -messages, the system sends the message to your app on the connected handheld device. -The message is attached as an extra in the <code><a href="/reference/android/content/Intent.html">Intent</a></code> you specified -to be used for the notification action.</p> - -<p class="note"><strong>Note:</strong> When developing with the Android emulator, -you must type text replies into the voice input field, so be sure you have enabled -<strong>Hardware keyboard present</strong> in the AVD settings.</p> - - -<h2 id="RemoteInput">Define the Remote Input</h2> - -<p>To create an action that supports voice input, first create an instance of - <a href="/reference/android/preview/support/wearable/notifications/RemoteInput.html"> -<code>RemoteInput</code></a> using the - <a href="/reference/android/preview/support/wearable/notifications/RemoteInput.Builder.html"><code>RemoteInput.Builder</code></a> APIs. - The - <a href="/reference/android/preview/support/wearable/notifications/RemoteInput.Builder.html"><code>RemoteInput.Builder</code></a> constructor takes a string that the system - will use as a key for the <code><a href="/reference/android/content/Intent.html">Intent</a></code> extra that carries the reply message - to your app on the handheld.</p> - -<p>For example, here's how to create a new - <a href="/reference/android/preview/support/wearable/notifications/RemoteInput.html"> -<code>RemoteInput</code></a> object that provides a custom - label for the voice input prompt:</p> - -<pre class="prettyprint"> -// Key for the string that's delivered in the action's intent -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(); -</pre> - - -<h3>Add Pre-defined Text Responses</h3> - -<img src="/wear/images/12_voicereply.png" height="200" style="float:right;margin:0 0 20px 40px" /> - -<p>In addition to allowing voice input, you can - provide up to five text responses that the user can select for quick replies. Call - <a href="/reference/android/preview/support/wearable/notifications/RemoteInput.Builder.html#setChoices(java.lang.String[])"><code>setChoices()</code></a> and pass it a string array.</p> - -<p>For example, you may define some responses in a resource array:</p> - -<p class="code-caption">res/values/strings.xml</code> -<pre class="prettyprint"> -<?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> -</pre> - -<p>Then, inflate the string array and add it to the - <a href="/reference/android/preview/support/wearable/notifications/RemoteInput.html"><code>RemoteInput</code></a>:</p> - -<pre> -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(); -</pre> - - - - -<h2 id="PrimaryAction">Receive Voice Input for the Primary Action</h2> - -<p>If "Reply" is your notification's primary action (defined by the <code><a href="/reference/android/support/v4/app/NotificationCompat.Builder.html#setContentIntent(android.app.PendingIntent)">setContentIntent()</a></code> -method), then you should attach the - <a href="/reference/android/preview/support/wearable/notifications/RemoteInput.html"><code>RemoteInput</code></a> to the main action using - <a href="/reference/android/preview/support/wearable/notifications/WearableNotifications.Builder.html#addRemoteInputForContentIntent(android.preview.support.wearable.notifications.RemoteInput)"> -<code>addRemoteInputForContentIntent()</code></a>. For example:</p> - -<pre> -// Create intent for reply action -Intent replyIntent = new Intent(this, ReplyActivity.class); -PendingIntent replyPendingIntent = - PendingIntent.getActivity(this, 0, replyIntent, 0); - -// Build the 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); - -// Create the 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(); -</pre> - - -<p>By using - <a href="/reference/android/preview/support/wearable/notifications/WearableNotifications.Builder.html#addRemoteInputForContentIntent(android.preview.support.wearable.notifications.RemoteInput)"> -<code>addRemoteInputForContentIntent()</code></a> to add the - <a href="/reference/android/preview/support/wearable/notifications/RemoteInput.html"><code>RemoteInput</code></a> object to the notification's primary action, -the button that normally appears as an "Open" action becomes the "Reply" action -and starts the voice input UI when users select it on Android Wear.</p> - - - -<h2 id="NewAction">Receive Voice Input for a Secondary Action</h2> - -<p>If the "Reply" action is not your notification's primary action and you want to enable -voice input for a secondary action, add the - <a href="/reference/android/preview/support/wearable/notifications/RemoteInput.html"><code>RemoteInput</code></a> to a new action button defined by an - <a href="/reference/android/preview/support/wearable/notifications/Action.html"> -<code>Action</code></a> object.</p> - -<p>You should instantiate the - <a href="/reference/android/preview/support/wearable/notifications/WearableNotifications.Action.html"> -<code>Action</code></a> with the - <a href="/reference/android/preview/support/wearable/notifications/WearableNotifications.Action.Builder.html"><code>Action.Builder()</code></a> -constructor, which takes an icon and text label for the action button, plus the -<code><a href="/reference/android/app/PendingIntent.html">PendingIntent</a></code> -the system should use to invoke your app when the user selects the action. For example:</p> - -<pre> -// Create the pending intent to fire when the user selects the action -Intent replyIntent = new Intent(this, ReplyActivity.class); -PendingIntent pendingReplyIntent = - PendingIntent.getActivity(this, 0, replyIntent, 0); - -// Create the remote input -RemoteInput remoteInput = new RemoteInput.Builder(EXTRA_VOICE_REPLY) - .setLabel(replyLabel) - .build(); - -// Create the notification action -Action replyAction = new Action.Builder(R.drawable.ic_message, - "Reply", pendingIntent) - .addRemoteInput(remoteInput) - .build(); -</pre> - - -<p>After you add the - <a href="/reference/android/preview/support/wearable/notifications/RemoteInput.html"><code>RemoteInput</code></a> to the - <a href="/reference/android/preview/support/wearable/notifications/WearableNotifications.Action.html"> -<code>Action</code></a>, add the - <a href="/reference/android/preview/support/wearable/notifications/WearableNotifications.Action.html"> -<code>Action</code></a> to the - <a href="/reference/android/preview/support/wearable/notifications/WearableNotifications.Builder.html"><code>WearableNotifications.Builder</code></a> using - <a href="/reference/android/preview/support/wearable/notifications/WearableNotifications.Builder.html#addAction(Action)"><code>addAction()</code></a>. -For example:</p> - -<pre> -// Create basic notification builder -NotificationCompat.Builder replyNotificationBuilder = - new NotificationCompat.Builder(this) - .setContentTitle("New message"); - -// Create the notification action and add remote input -Action replyAction = new Action.Builder(R.drawable.ic_message, - "Reply", pendingIntent) - .addRemoteInput(remoteInput) - .build(); - -// Create wearable notification and add action -Notification replyNotification = - new WearableNotifications.Builder(replyNotificationBuilder) - .addAction(replyAction) - .build(); -</pre> - -<p>Now, when the user selects "Reply" from an Android wearable, the system prompts the user - for voice input (and shows the list of pre-defined replies, if provided). - Once the user completes a response, the system invokes - the <code><a href="/reference/android/content/Intent.html">Intent</a></code> attached to the action and adds the -<code>EXTRA_VOICE_REPLY</code> extra (the string - you passed to the - <a href="/reference/android/preview/support/wearable/notifications/RemoteInput.Builder.html"><code>RemoteInput.Builder</code></a> constructor) - with the user's message as the string value.</p> - - - - -</body> -</html> - - </div> - - <div class="content-footer layout-content-row" - itemscope itemtype="http://schema.org/SiteNavigationElement"> - <div class="layout-content-col col-9" style="padding-top:4px"> - - <div class="g-plusone" data-size="medium"></div> - - </div> - - <div class="paging-links layout-content-col col-4"> - - </div> - - </div> - - - - - </div> <!-- end jd-content --> - -<div id="footer" class="wrap" > - - - <div id="copyright"> - - Except as noted, this content is - licensed under <a href="http://creativecommons.org/licenses/by/2.5/"> - Creative Commons Attribution 2.5</a>. For details and - restrictions, see the <a href="/license.html">Content - License</a>. - </div> - - - <div id="footerlinks"> - - <p> - <a href="/about/index.html">About Android</a> | - <a href="/legal.html">Legal</a> | - <a href="/support.html">Support</a> - </p> - </div> - -</div> <!-- end footer --> -</div><!-- end doc-content --> - -</div> <!-- end body-content --> - - - - - - -<!-- Start of Tag --> -<script type="text/javascript"> -var axel = Math.random() + ""; -var a = axel * 10000000000000; -document.write('<iframe src="https://2507573.fls.doubleclick.net/activityi;src=2507573;type=other026;cat=googl348;ord=' + a + '?" width="1" height="1" frameborder="0" style="display:none"></iframe>'); -</script> -<noscript> -<iframe src="https://2507573.fls.doubleclick.net/activityi;src=2507573;type=other026;cat=googl348;ord=1?" width="1" height="1" frameborder="0" style="display:none"></iframe> -</noscript> -<!-- End of Tag --> -</body> -</html> - - - |