当前位置: 首页 > 知识库问答 >
问题:

从Android可穿戴设备获取语音输入

濮冠宇
2023-03-14

目前,谷歌Hangouts和Facebook Messenger等应用程序能够接受来自Android可穿戴设备的语音输入,将其转换为文本,并向用户发送回复信息。我遵循了https://developer.android.com/training/wearables/notifications/voice-input.html的教程,当我调用这里概述的方法时:

private CharSequence getMessageText(Intent intent) {
    Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
        if (remoteInput != null) {
            return remoteInput.getCharSequence(EXTRA_VOICE_REPLY);
        }
    }
    return null;
}

我收到一行RemoteInput.getResultsFrominTent(intent)的错误,指出我的API级别太低。目前使用三星Galaxy S3,4.4.2 API 19。显然,我无法访问这种方法,所以我的问题是,像Hangouts和Facebook Messenger这样的应用程序是如何接受语音输入并将其输入到我的设备上的?

共有1个答案

东门胤
2023-03-14

developers.Android声明RemoteInput.getResultsFrominTent(intent);是一个传达,这样我们就不需要解析ClipData,所以我做了一些研究,不知道解析这个ClipData到底需要什么,这就是我解决问题的方法:

private void getMessageText(Intent intent){

    ClipData extra = intent.getClipData();

    Log.d("TAG", "" + extra.getItemCount());    //Found that I only have 1 extra
    ClipData.Item item = extra.getItemAt(0);    //Retreived that extra as a ClipData.Item

    //ClipData.Item can be one of the 3 below types, debugging revealed
        //The RemoteInput is of type Intent

    Log.d("TEXT", "" + item.getText());
    Log.d("URI", "" + item.getUri());
    Log.d("INTENT", "" + item.getIntent());

    //I edited this step multiple times until I discovered that the
    //ClipData.Item intent contained extras, or rather 1 extra, which was another bundle
    //The key for that bundle was "android.remoteinput.resultsData"
    //and the key to get the voice input from wearable notification was EXTRA_VOICE_REPLY which
    //was set in my previous activity that generated the Notification. 

    Bundle extras = item.getIntent().getExtras();
    Bundle bundle = extras.getBundle("android.remoteinput.resultsData");

    for (String key : bundle.keySet()) {
        Object value = bundle.get(key);
        Log.d("TAG", String.format("%s %s (%s)", key,
                value.toString(), value.getClass().getName()));
    }

    tvVoiceMessage.setText(bundle.get(EXTRA_VOICE_REPLY).toString());
}

对于那些在Android-L发布之前有兴趣开发使用通知和语音输入回复的可穿戴应用程序的人来说,这个答案应该很有用。

 类似资料:
  • 物联网是智能穿戴设备的核心技术,智能穿戴设备是物联网的关键载体。两者的结合,实现更加丰富灵活的应用功能。 我们能够提供: 最广泛的网络覆盖面; 灵活的计费方式,降低运营费用; 综合的管理平台和多种应用,支持灵活的业务运营; 稳定,快捷的通信服务。

  • 我在访问Moto360的心率传感器时遇到问题。 我试着做以下事情: 然后实现SensorEventListener接口: 此外,我尝试列出所有的传感器,它没有显示心率传感器在列表上。 当然我加了一些 有什么想法吗? W.

  • 我正在创建一个带有自定义项目的mod,我想让该项目可穿戴,但我不知道如何。这是我的Mod项目代码。

  • 我正在使用JS框架创建一个HarmonyOS可穿戴应用程序,我想使用振动器。手表肯定有一个振动器,因为当我使用设置应用程序中的滚动weel时,我可以感觉到它。 因此,我请求了文件中的system_grant权限,如下所示 那么像这样使用进口振动器应该很简单 我确实获得了登录,但在振动器回调中没有其他日志,设备也不振动。 有人知道我做错了什么吗? 编辑:我注意到日志后面有一堆错误日志。我不明白它们是

  • 问题内容: 如何获取Android设备名称?我正在使用HTC的愿望。当我通过HTC Sync将其连接时,软件将显示名称 “ HTC Smith” 。我想通过代码获取此名称。 在Android中怎么可能? 问题答案: 为了获得Android设备名称,您只需要添加一行代码即可: 在这里找到:getting-android-device- name

  • 我正在尝试访问三星Gear Live Watch的心率监视器。手表搭配4.4.4手机,工作正常。我正在跟踪官方的BasicSensorsApi示例。 我可以通过以下范围成功连接到Google Play服务: 如果我将更改为,例如或,列表将包含我的电话,这似乎是合乎逻辑的。 那么,为什么手表没有被列为可用的? 请注意:此文件不是以下文件的副本: null 我不认为在手表上启用调试模式是必要的,但我已