搜索是 Android 上一项核心的用户功能。无论内容位于设备本地还是互联网上,用户都应该能够搜索所有可用的数据。为了帮助用户获得一致的搜索体验,Android 提供了一个搜索框架,可帮助您为应用实现搜索功能。

图 1. 带自定义搜索建议的搜索对话框。
搜索框架提供了两种搜索输入模式:屏幕顶部的搜索对话框,或者您可以嵌入到 Activity 布局中的搜索微件 (SearchView
)。无论采用哪种方式,Android 系统都会通过将搜索查询传递给执行搜索的特定 Activity 来协助您实现搜索功能。您还可以启用搜索对话框或微件,以便在用户输入时提供搜索建议。图 1 显示了带有可选搜索建议的搜索对话框示例。
设置搜索对话框或搜索微件后,您可以执行以下操作:
- 启用语音搜索。
- 根据用户最近的查询提供搜索建议。
- 提供与您的应用数据中的实际结果匹配的自定义搜索建议。
- 在全系统的 Quick Search Box 中提供您应用的搜索建议。
注意:搜索框架并未提供用于搜索您数据的 API。要执行搜索,您需要使用适合您数据的 API。例如,如果您的数据存储在 SQLite 数据库中,请使用 android.database.sqlite
API 执行搜索。
此外,无法保证设备会提供一个用于调用您应用中搜索界面的专用 SEARCH 按钮。在使用搜索对话框或自定义界面时,您必须在界面中提供一个用于激活搜索界面的搜索按钮。如需了解详情,请参阅调用搜索对话框。
以下页面向您展示如何使用 Android 框架来实现搜索:
- 创建搜索界面
- 如何设置您的应用以使用搜索对话框或搜索微件。
- 添加最近查询建议
- 如何根据先前使用的查询提供建议。
- 添加自定义建议
- 如何根据您应用中的自定义数据提供建议,并在全系统的 Quick Search Box 中提供这些建议。
- 可搜索配置
- 可搜索配置文件参考文档。其他文档也从特定行为的角度讨论了配置文件。
保护用户隐私
在您的应用中实现搜索功能时,请采取措施保护用户隐私。许多用户认为他们在手机上的活动(包括搜索)属于隐私信息。为保护用户隐私,请遵循以下原则:
- 不要向服务器发送个人信息,如果必须发送,请不要记录日志。
个人信息是指任何可以识别用户身份的信息,例如其姓名、电子邮件地址、账单信息,或可以合理关联到此类信息的其他数据。如果您的应用在服务器协助下实现搜索功能,请避免随搜索查询一起发送个人信息。例如,如果您正在搜索邮政编码附近的商家,则无需同时发送用户 ID;只需将邮政编码发送到服务器即可。如果必须发送个人信息,请避免记录日志。如果必须记录日志,请务必非常小心地保护该数据,并尽快将其删除。
- 为用户提供清除搜索历史记录的方法。
搜索框架可帮助您的应用在用户输入时提供与上下文相关的建议。有时,这些建议是基于用户在之前会话中进行的搜索或其他操作。用户可能不希望他们的搜索历史记录被其他设备用户看到。如果您的应用提供了可能泄露之前搜索活动的建议,请实现一种用户可以清除搜索历史记录的方法。如果您使用的是
SearchRecentSuggestions
,您可以调用clearHistory()
方法。如果您正在实现自定义建议,则需要在内容提供程序中提供类似的“清除历史记录”方法,供用户执行。