android XML下searchable.xml

本文深入解析Android应用中搜索提示配置的XML属性,包括搜索建议授权、动作定义、阈值设定、全局搜索加入及占位符定义,同时提供AndroidManifest.xml中SearchSuggestionsProvider的配置示例。
   1: <?xml version="1.0" encoding="utf-8"?>

   2: <searchable xmlns:android="http://schemas.android.com/apk/res/android"

   3:     android:label="@string/search_label" 

   4:     android:hint="@string/search_hint"

   5:     android:searchSettingsDescription="@string/search_settings_description"

   6:     android:searchSuggestAuthority="searchprovider"

   7:     android:searchSuggestIntentAction="android.intent.action.SEARCH"

   8:     android:searchSuggestThreshold="1"

   9:     android:includeInGlobalSearch="true"

  10:     android:searchSuggestSelection=" ?"

  11:     >

  12: </searchable>


参数说明:
android:searchSuggestAuthorith
此属性的值就是SearchSuggestAuthorith中的AUTHORITH了。
android:searchSuggestIntentAction
此属性定义了当我们选中搜索提示的内容时发生的目的动作。
android:searchSuggestThreshold
此属性定义了至少输入几个字符时才会弹出提示
android:includeInGlobalSearch
是否将内容加入android的全局搜索。true,加入。
android:searchSuggestSelection
定义搜索时参数的占位符
 
PS:配置参数不止这些,可以自己看看android的参考手册。
 
3.配置AndroidManifest.xml
   1: <provider android:name=".SearchSuggestionsProvider" android:authorities="searchprovider" />
 
注意authorities的属性值哦。o(∩_∩)o

### Google Quick Search Box 的功能与问题解决 Google Quick Search Box(简称 QSB,包名 `com.google.android.googlequicksearchbox`)是一个集成在 Android 系统中的搜索功能组件,允许用户通过全局搜索界面快速查找设备上的内容,包括应用、联系人、短信、音乐、浏览器历史等。QSB 的核心功能是通过系统级集成,将多个应用的数据聚合并提供统一的搜索入口。 #### 功能特性 1. **全局搜索支持** QSB 提供了一个统一的搜索界面,用户可以在主屏幕顶部的搜索栏输入关键词,系统会实时显示来自多个应用的建议和结果。例如,输入联系人姓名可以直接拨打电话或发送短信,输入音乐名称可以直接播放歌曲。 2. **搜索建议机制** 支持全局搜索的应用需要实现一个 `ContentProvider`,并通过 `searchable.xml` 配置文件定义搜索行为。例如: ```xml <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="@string/search_hint"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </searchable> ``` 该配置允许应用向 QSB 提供搜索建议[^2]。 3. **模块化搜索结果** QSB 本身并不执行搜索逻辑,而是调用各个应用模块中定义的数据库进行查询。搜索建议会显示在 QSB 的搜索模块列表中,而完整的搜索结果则跳转到对应的应用模块中显示[^4]。 #### 常见问题与解决方法 1. **无法显示搜索建议** 如果某个应用的搜索建议未在 QSB 中显示,可能的原因包括: - 应用未正确配置 `searchable.xml` 文件。 - `ContentProvider` 实现不完整或未注册。 - 搜索建议的 `Intent` 配置错误。 解决方法包括检查 `AndroidManifest.xml` 中的 `<activity>` 是否正确声明了 `searchable` 元数据,并确保 `ContentProvider` 能够正确响应 `android.intent.action.SEARCH` 动作。 2. **搜索结果为空或不准确** 这通常与应用内部的数据库查询逻辑有关。QSB 仅负责触发搜索请求,实际的查询由应用模块完成。因此,应检查应用的数据库查询语句是否正确,是否支持模糊匹配或通配符匹配。 3. **QSB 应用崩溃或无响应** 如果 QSB 应用本身出现崩溃,可能是由于系统资源不足或与其他系统组件冲突。可以尝试清除 QSB 的缓存数据,或更新到最新版本的 Google 应用(QSB 已整合进 Google 应用)。 4. **在自定义 ROM 中移除 QSB** 在某些定制 Android 系统中,开发者可能希望移除 QSB。可以通过修改 `mainline_arm64.mk` 或 `handheld_product.mk` 文件,删除与 `QuickSearchBox` 相关的依赖项,并清理构建目录中的相关文件[^1]。 #### 代码示例:实现搜索建议的 ContentProvider 以下是一个简单的 `ContentProvider` 实现,用于向 QSB 提供搜索建议: ```java public class MySearchProvider extends ContentProvider { private static final String AUTHORITY = "com.example.myapp.searchprovider"; private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); static { uriMatcher.addURI(AUTHORITY, "search_suggest_query", 1); } @Override public boolean onCreate() { return true; } @Nullable @Override public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { if (uriMatcher.match(uri) == 1) { String query = uri.getLastPathSegment(); MatrixCursor cursor = new MatrixCursor(new String[]{ BaseColumns._ID, SearchManager.SUGGEST_COLUMN_TEXT_1, SearchManager.SUGGEST_COLUMN_INTENT_DATA }); // 模拟搜索建议 if (query != null && !query.isEmpty()) { cursor.addRow(new Object[]{0, "搜索: " + query, "content://com.example.myapp/search/" + query}); } return cursor; } return null; } // 其他方法省略... } ``` 在 `AndroidManifest.xml` 中注册该 `ContentProvider`: ```xml <provider android:name=".MySearchProvider" android:authorities="com.example.myapp.searchprovider" android:exported="true" /> ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值