http://blog.csdn.net/mayingcai1987/article/details/6268732

1. 标题:

应用程序如何全面支持搜索

2. 引言:

如果想让某个应用程序支持全局搜索,必须对这个应用程序进行一系列配置,并实现可被外界访问的内容提供者向搜索应用程序 (QuickSearchBox)提供搜索結果,根据配置信息,应用程序可被搜索框架识别为搜索源,搜索应用程序(QuickSearchBox)也可以 通过解析配置信息组拼成URI请求应用的ContentProvider获取搜索結果。

3. 配置实现:

1. 应用程序中应当存在一个Activity,这个Activity在AndroidManifest.xml中的基本配置,如下:

<activity android:name="com.focus.FishMeActivity" android:label="@string/app_name">
  <intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name= "android.intent.category.LAUNCHER" />
  </intent-filter>

<!-- 全局搜索支持  开始 -->
     <!-- 这个intent-filter是搜索框架启动这个Activity时Intent中配置的action见下面Activity作用第二项 -->

  <intent-filter>
<action android:name= "com.focus.FISH_ME"/>
<category android:name="android.intent.category.DEFAULT" />
  </intent-filter>

  <!-- 这个intent-filter是固定配置不需要改变,拷过去直接用-->
  <intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name= "android.intent.category.DEFAULT" />
  </intent-filter>

     <!-- 这个meta-data也是固定配置不需要改动,他需要一个xml文件,下面会有这个xml文件的最标准,最简单的配置,请继续向下看

(searchable.xml)-->
  <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />
  <!-- 全局搜索支持  结束 -->

</activity>

说一下这个Activity的作用:

第一,这样一个Activity在你的应用程序中是必须存在的,因为你配置了上面我用红色注释标注的代码后,这个Activity可以被识别为搜索源,

你的应用支持全局搜索了。

第二,当搜索出結果信息后单击某一个結果项后会打开这个Activity显示搜索出的内容。

2. searchable.xml最基本,最简单配置:

<?xml version="1.0" encoding="utf-8"?>
  <searchable xmlns:android="http://schemas.android.com/apk/res/android"
<!-- 这两个属性是固定的必须有-->
android:label="@string/search_label"
android:includeInGlobalSearch="true"      
    <!-- 这个authority是你写的ContentProvider的Authority,下面会说到 -->

android:searchSuggestAuthority="com.focus.FISH_ME_AUTHORITY"
    <!--这个action就是上面1中你配置的action-->
    android:searchSuggestIntentAction="com.focus.FISH_ME">
  </searchable>

这个文件的属性介绍会在后面的文章讲到。

3. 在AndroidManifest.xml文件中配置ContentProvider:

<provider

android:name = "FishMeProvider"
<!--这个authority和上面2中配置的authority相对应-->
    android:authorities= "com.focus.FISH_ME_AUTHORITY"

/>

4. 如何构建Content Provider:

在QuickSearchBox中通过ContentResolver调用内容提供者的query(Uri, String[], String, String[], String)方法进行信息搜索,应用程序必须实

现这个方法并且返回搜索到的Cursor对象。

下面将对ContentProvider的query方法的参数进行说明:

第一个参数(uri):

content://authority/suggestion.path/search_suggest_query/queryStr?limit=50

authority:对应searchable.xml文件中的android:searchSuggestAuthority属性。
suggestion.path:对应searchable.xml文件中的android:searchSuggestPath属性。
search_suggest_query : 固定字符串。
queryStr: 查询字符串。
limit : 查询条数。

第二个参数(projection):一直为null。

第三个参数(selection):对应searchable.xml文件中android:searchSuggestSelection属性,ContentProvider的query方法将会调用SQLite数据

库的Query方法,用这个参数组成SQL语句中where后面的条件,如:where name like ?,”name like ? ”就是selection参数的值,注意,

android:searchSuggestSelection属性中配置的查询条件不能用“AND”或“OR”等符号连接多个条件(不能写成:“name like ? AND age like ?”)。

第四个参数(selectionArgs):如果searchable.xml文件中android:searchSuggestSelection属性值不为空,程序会将查询字符串做为这个数组

的第一个元素,也是唯一的元素,在上面第三个参数中定义了查询条件,这个参数的作用是给查询条件中的问号赋值。

第五个参数:一直为null。

该方法将搜索到的数据以cursor对象的形式返回。

Android中全局搜索(QuickSearchBox)详解的更多相关文章

  1. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  2. Android中mesure过程详解

    我们在编写layout的xml文件时会碰到layout_width和layout_height两个属性,对于这两个属性我们有三种选择:赋值成具体的数值,match_parent或者wrap_conte ...

  3. Android中Intent组件详解

    Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...

  4. Android中的动画详解系列【4】——Activity之间切换动画

    前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自定义动画,这一篇我们来看看如何将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 如 ...

  5. Android中shape属性详解

    一.简单使用 刚开始,就先不讲一堆标签的意义及用法,先简单看看shape标签怎么用. 1.新建shape文件 首先在res/drawable文件夹下,新建一个文件,命名为:shape_radius.x ...

  6. RxJava在Android中使用场景详解

    RxJava 系列文章 <一,RxJava create操作符的用法和源码分析> <二,RxJava map操作符用法详解> <三,RxJava flatMap操作符用法 ...

  7. Android中的Service详解

    今天我们就来介绍一下Android中的四大组件中的服务Service,说到Service, 它分为本地服务和远程服务:区分这两种服务就是看客户端和服务端是否在同一个进程中,本地服务是在同一进程中的,远 ...

  8. Android中Service 使用详解(LocalService + RemoteService)

    Service 简介: Service分为本地服务(LocalService)和远程服务(RemoteService): 1.本地服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外L ...

  9. Android中SQLite应用详解

    上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们对SQLite已经有所了解了,那今天呢,我就和大家分享一下在Android中如何使用SQLite. 现在的主流移动设备像Android.i ...

  10. Android中的Intent详解

    前言: 每个应用程序都有若干个Activity组成,每一个Activity都是一个应用程序与用户进行交互的窗口,呈现不同的交互界面.因为每一个Acticity的任务不一样,所以经常互在各个Activi ...

随机推荐

  1. 安卓天天练练(三)常用组件Toast

    要写几句java package com.narumi.android_7_2; import android.app.Activity; import android.os.Bundle; impo ...

  2. Count Good Substrings

    Codeforces Round #258 (Div. 2) D:http://codeforces.com/problemset/problem/451/D 题意:给你一个字符串,只有ab组成.相同 ...

  3. struts2表单验证

    1:采用手工编写代码实现. 通过继承ActionSupport类,然后重写vlidate方法,validate方法会校验跟execute同样签名的方法,当某个数据校验失败时,我们应该调用addFiel ...

  4. Spring 4 and MyBatis Java Config

    TL;DR With the Java Config enhancements in Spring 4, you no longer need xml to configure MyBatis for ...

  5. spin_count

    oracle的一个隐藏参数_spin_count当中记录了这个值,如果超过这个参数就那这个进程就释放cpu进入睡眠状态.(然后这里有了争议,传统的说法是在睡眠了一段时间以后会醒来,但是也有人说是进入了 ...

  6. 接收对 http://192.168.1.18:8001/ObtainData/Service 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。

    [2015/8/5 19:28:49]错误信息:接收对 http://192.168.1.18:8001/ObtainData/Service 的 HTTP 响应时发生错误.这可能是由于服务终结点绑定 ...

  7. touchend事件的preventDefault阻止掉了click事件

    <div id="box">box</div> <script> var isTouchDevice = function() { return ...

  8. 自己记录java环境搭建之-maven

    简述: 现需要在Eclipse中配置Maven插件,同时安装maven应用,配置Maven环境变量,建立Maven管理的工程,并用Maven导入Gson包, 编写简易Json输出程序 步骤: 1. 首 ...

  9. vijosP1067Warcraft III 守望者的烦恼

    vijosP1067Warcraft III 守望者的烦恼 链接:https://vijos.org/p/1067 [思路] 矩阵乘法. 可以得出递推式:      f[i]=sum{ f[n-1], ...

  10. Java IO复习(一)

    package com.zyw.file; import java.io.*; /** * Created by zyw on 2016/3/10. */ public class IOTest { ...