首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >安卓搜索小部件- onQueryTextSubmit和发送意图给SearchableActivity的区别?

安卓搜索小部件- onQueryTextSubmit和发送意图给SearchableActivity的区别?
EN

Stack Overflow用户
提问于 2013-03-14 08:19:27
回答 1查看 2.3K关注 0票数 9

我有一个包含SearchView小部件的活动。我正在使用onQueryTextSubmit侦听器处理文本搜索的结果,这很好。(活动本身被指定为可搜索的活动)。

最近,我决定通过在voiceSearchMode文件中添加“searchable.xml”属性来添加语音识别:

searchable.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="@string/search_hint"
    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer">
</searchable>

当我添加语音识别时,onQueryTextSubmit侦听器在提供语音输入后不会被调用(但是,在使用editText框提供文本输入之后仍然会调用它)。语音识别器将ACTION_SEARCH意图发送回相同的活动(这可以在onCreate方法中处理)。是否有一种使用语音识别器激活onQueryTextSubmit方法的方法(或者类似的方法不需要重新创建活动?)我之所以问这个问题,是因为如果识别器必须发送一个意图,我必须使用APP_DATA创建并发送一个额外的包,这似乎不起作用。

所以我的问题是:

(1)如何使用(或可以使用)启用语音识别搜索的onQueryTextSubmit侦听器?(与常规基于文本的搜索一样)

(2)如果(1)不可能,那么如何通过意图传递语音识别搜索查询的附加数据?,我尝试通过onSearchRequested()添加它,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public boolean onSearchRequested() {
    Bundle appData = new Bundle();
    appData.putInt("testKey", 44);
    this.startSearch(null, true, appData, false);
    return true;
}

但是,当我试图在onCreate中访问它时,appData是空的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.overview_list);

    Bundle extras = getIntent().getExtras();
    Bundle appData = getIntent().getBundleExtra(SearchManager.APP_DATA);

    // Receive search intents (from voice recognizer)
    Intent intent = getIntent();
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
      String query = intent.getStringExtra(SearchManager.QUERY);
      //doMySearch(query);
    }
}

(此外,当我添加onSearchRequested处理程序时,按下放大镜图标会使搜索小部件相互展开两次-我猜想这是因为除了设置了可搜索的xml配置之外,我还要手动开始搜索)。

与此相关的是,在同一活动中发送意图比使用侦听器有什么好处?我知道,如果您的SearchableActivity是另一个活动,那么您希望向它发送一个意图;但是,如果SearchableActivity是包含搜索小部件的相同活动,那么使用意图有什么意义呢?

如有任何意见和建议,将不胜感激。如果需要提供更多的细节,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-15 14:42:36

(1)据我所知,通过广泛的调试,当我通过语音识别器按钮输入搜索查询时,onQueryTextSubmit就不会被调用。然而,有一个简单的解决办法-见下文。

(2)我通过将活动启动模式设置为"singleTop“来解决我的问题--这意味着,新的ACTION_SEARCH意图不是在语音搜索之后重新创建,而是在onNewIntent()处理程序中活动的现有实例中处理。因此,您可以访问现有活动的所有私有成员,并且不需要通过修改搜索意图通过包传递任何数据。

AndroidManifest.xml:将launchmode=singleTop属性添加到可搜索的活动中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<activity
    android:name=".SearchableActivity"
    android:label="@string/app_name"
    android:uiOptions="splitActionBarWhenNarrow"
    android:launchMode="singleTop">

    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>
    <meta-data android:name="android.app.searchable"
        android:resource="@xml/searchable" />
</activity>

SearchableActivity,中添加onNewIntent()方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public void onNewIntent(Intent intent) {
    super.onNewIntent(intent);      
    setIntent(intent);
    handleIntent(intent);
}

private void handleIntent(Intent intent) {
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        // Gets the search query from the voice recognizer intent
        String query = intent.getStringExtra(SearchManager.QUERY);

        // Set the search box text to the received query and submit the search
        mSearchView.setQuery(query, true);
    }
}

这实际上是接收语音识别器查询并将其放在文本框中,并提交文本框搜索,该文本框搜索通常由onQueryTextSubmit处理。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15414673

复制
相关文章
python中带*号的参数,一个星号,两个星号
2.带两个星号(*)参数的函数传入的参数则存储为一个字典(dict),并且再调用是采取a=1,b=2,c=3的形式
狼啸风云
2021/04/01
3.6K0
python 函数参数的传递(参数带星号的说明)
python中函数参数的传递是通过赋值来传递的。函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要有四种方式: 1.F(arg1,arg2,...) 这 是最常见的定义方式,一个函数可以定义任意个参数,每个参数间用逗号分割,用这种方式定义的函数在调用的的时候也必须在函数名后的小括号里提供个数相等的 值(实际参数),而且顺序必须相同,也就是说在这种调用方式中,形参和实参的个数必须一致,而且必须一一对应,也就
hbbliyong
2018/03/05
3.7K0
bgd、sgd、mini-batch gradient descent、带mini-batch的sgd
SGD是最速梯度下降法的变种。使用最速梯度下降法,将进行N次迭代,直到目标函数收敛,或者到达某个既定的收敛界限。每次迭代都将对m个样本进行计算,计算量大。为了简便计算,SGD每次迭代仅对一个样本计算梯度,直到收敛。伪代码如下(以下仅为一个loop,实际上可以有多个这样的loop,直到收敛):
狼啸风云
2021/08/05
9130
星号的作用
星号( * )已经在此前的学习中出现过,它可以作为乘法和乘方的运算符,也可以表示序列中元素的重复。对于函数而言,它的作用则体现在收集参数上。
老齐
2021/10/21
5.1K0
python的星号(*)和双星号(**)用法
在Python中,星号除了用于乘法数值运算和幂运算外,还有一种特殊的用法"在变量前添加单个星号或两个星号",实现多参数的传入或变量的拆解,本文将详细介绍"星号参数"的用法。
matinal
2023/10/13
4210
trick(三)、函数参数前面单星号(*)和双星号(**)的区别
在python的函数中经常能看到输入的参数前面有一个或者两个星号:例如 def foo(param1, *param2): def bar(param1, **param2): 这两种用法其实都是用来将任意个数的参数导入到python函数中。 单星号(*):*agrs 将所以参数以元组(tuple)的形式导入: 例如: >>> def foo(param1, *param2): print param1 print param2 >>> foo(1,2,3,4,5) 1 (
狼啸风云
2022/11/21
8790
星号转移
本关任务:规定输入的字符串中只包含字母和*号。给定程序的功能是将字符串中的前导*号全部移到字符串的尾部。
小Bob来啦
2020/12/16
2.9K0
星号转移
Python中带else子句的for循环执行过程
这几天在厦门讲课,每天6小时,没有太多时间写新代码,宾馆不知道咋想的也不提供WiFi,只好用手机做个热点临时分享一点基础知识,300M的包月流量伤不起,热点瞬间就把仅剩的40M流量用完了,赶紧发完关闭热点。 在Python中,有while和for两种循环,并且都可以带有else子句。其中while循环常用于无法提前确定循环次数的场合,当然也可以用于循环可以提前确定的场合;for循环常用于可以提前确定循环次数的场合,尤其适合用来迭代或遍历可迭代对象中的元素,这也是for循环的本质。 对于带有else子句的循环
Python小屋屋主
2018/04/16
1.6K0
Python中带else子句的for循环执行过程
Java打印菱形星号
先只打印#号, 然后打印*号,找规 双嵌套for循环, 外循环负责控制行数,控制行,控制换行 内循环负责控制列数,控制列,控制列打印的符号 找规律。。用i来表示j的最大值。
昨天50还没用完
2018/06/29
2.9K0
2315. 统计星号
我的思路是遍历字符串,记录|的个数,当其为奇数时,发现*也不计数,如果其为偶数,则计*的个数。比如"l|*e*et|c**o|*de|",设置一个变量flag,遇到第一个|,计数为1,后面遇到*e*et都不计数,然后遇到第二个|,将flag设置为2,然后后面的c**o计数为2,然后遇到一个|,flag设置为3,*de不会计数,然后遇到一个|,flag计数为4。再遇到下一个|之前都计数,但是这里后面没有了,便不计数。
Regan Yue
2023/07/10
1470
SAP QM Batch to Batch的转移过账事务中的Vendor Batch
下午,笔者在微信上收到之前的P项目客户方的合作伙伴邱老师的message,说是问我一个问题。
SAP虾客
2021/03/01
7350
SAP QM Batch to Batch的转移过账事务中的Vendor Batch
深度学习中的batch(batch size,full batch,mini batch, online learning)、iterations与epoch
我们已知在梯度下降中需要对所有样本进行处理过后然后走一步,那么如果我们的样本规模的特别大的话效率就会比较低。假如有500万,甚至5000万个样本(在我们的业务场景中,一般有几千万行,有些大数据有10亿行)的话走一轮迭代就会非常的耗时。这个时候的梯度下降使用了全部的样本数据,所以叫做full batch。
全栈程序员站长
2022/07/31
2.6K0
深度学习中的batch(batch size,full batch,mini batch, online learning)、iterations与epoch
如何隐藏Code39码的星号
CODE 39是 Intermec公司在1975年研制成功的。包括数字、字母和一些符号在内,条形码共包括43个字符。由于可以处理字母,CODE 39在工业领域必不可少,用于汽车、电子等工厂自动化行业。Code 39码支持26个英文大写字母(A-Z),十个数字(0-9),以及符号(-、.、_(空)、*、$、/、+、%)。可以对任意长度的数据进行编码,Code 39码用于物流跟踪、生产线流程等方面,是比较常用的条形码类型之一。39码的起始码和终止码为固定的星号“*”,即39码前后各有一个星号“*”来标识条形码的开始和结束。因为有些用户制作条码时,不需要显示头尾的星号,所以下面我们就介绍如何隐藏这个起始码和终止码。
神奇像素科技
2022/02/14
1.4K0
如何隐藏Code39码的星号
查看星号密码工具
可以查看星号密码的工具: 效果还是很强大的,欢迎使用! 星号密码查看
Youngxj
2018/06/07
4.3K0
Batch Normalization的诅咒
Batch Normalization确实是深度学习领域的重大突破之一,也是近年来研究人员讨论的热点之一。Batch Normalization是一种被广泛采用的技术,使训练更加快速和稳定,已成为最有影响力的方法之一。然而,尽管它具有多种功能,但仍有一些地方阻碍了该方法的发展,正如我们将在本文中讨论的那样,这表明做归一化的方法仍有改进的余地。
石晓文
2020/11/09
8780
Batch Normalization的诅咒
Python字典前双星号(**)的作用
Python中,单星号 * 和双星号 ** 除了作为“乘”和“乘方”的数值运算符外,还在列表、元组、字典的操作中有看到,下面对其进行解释:
狼啸风云
2020/07/01
2.2K0
点击加载更多

相似问题

如何使用PLI例程获取verilog向量端口的尺寸?

13

如何在Modelsim中重新启动Verilog模拟

33

如何使用VPI PLI - verilog VCS查找是否连接了两个Verilog模块

12

Verilog连续模拟

10

如何使用Verilog宏模拟$display?

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文