Tôi có hai hoạt động Tìm kiếm khác nhau được triển khai với SearchManager trong ứng dụng của mình. Một là mặc định có thể tìm kiếm cho toàn bộ ứng dụng và cái kia được sử dụng chỉ cho một hoạt động. Hai tìm kiếm này thực hiện tra cứu dữ liệu khác nhau và không có ý nghĩa gì khi chia sẻ lịch sử tìm kiếm trên hai tìm kiếm khác nhau. Hai tìm kiếm khác nhau đang hoạt động tốt trong ứng dụng, vấn đề của tôi là với lịch sử tìm kiếm gần đây.Nhiều SearchRecentSuggestionsCác lớp học trong ứng dụng Android có thể?
Vấn đề là có hai lớp khác nhau SearchRecentSuggestionsProvider được xác định trong ứng dụng, nhưng mọi tìm kiếm được thực hiện trong một hiển thị trong cả lịch sử tìm kiếm gần đây của cả hai tìm kiếm. Tôi đã đọc qua chủ đề SearchManager trong Hướng dẫn dành cho nhà phát triển nhưng không thấy bất kỳ thông tin nào về nhiều nhà cung cấp đề xuất.
Dưới đây là hai nhà cung cấp trong AndroidManifest.xml, trong nút:
<provider android:name=".SearchOneRecentSuggestionsProvider"
android:authorities="com.company.SearchOneRecentSuggestionsProvider"></provider>
<provider android:name=".SearchTwoRecentSuggestionsProvider"
android:authorities="com.company.SearchTwoRecentSuggestionsProvider"></provider>
Dưới đây là các lớp được định nghĩa trong SearchOneRecentSuggestionsProvider.java:
package com.company;
import android.content.SearchRecentSuggestionsProvider;
public class SearchOneRecentSuggestionsProvider extends SearchRecentSuggestionsProvider {
public final static String AUTHORITY = "com.company.SearchOneRecentSuggestionsProvider";
public final static int MODE = DATABASE_MODE_QUERIES;
public SearchOneRecentSuggestionsProvider() {
setupSuggestions(AUTHORITY, MODE);
}
}
(Lớp SearchTwoRecentSuggestionsProvider trông giống hệt nhau ngoại trừ việc thay thế One with Two và nằm trong tệp SearchTwoRecentSuggestionsProvider.java riêng của nó.)
Đây là những gì bên trong cơ sở dữ liệu gợi ý tìm kiếm (tại /data/data/com.company/databases/suggestions.db):
# sqlite3 suggestions.db
SQLite version 3.5.9
Enter ".help" for instructions
sqlite> .tables
android_metadata suggestions
sqlite> .schema suggestions
CREATE TABLE suggestions (_id INTEGER PRIMARY KEY,display1 TEXT UNIQUE ON CONFLICT REPLACE,query TEXT,date LONG);
sqlite> select * from suggestions;
1|searchone|searchone|1296177852444
2|searchtwo|searchtwo|1296177878744
Không có cột cho SearchRecentSuggestionsProvider, vì vậy có lẽ không có cách nào để tách lịch sử cho hai tìm kiếm ?
Kết quả cuối cùng của tất cả điều này là khi bạn thực hiện tìm kiếm trong một trong hai tìm kiếm khác nhau, bạn sẽ thấy cả tìm kiếm và tìm kiếm trong các đề xuất lịch sử tìm kiếm gần đây. Tôi muốn mỗi người có lịch sử riêng nếu có thể. Hy vọng rằng tôi không chỉ bỏ lỡ điều gì ngớ ngẩn! Cảm ơn đã dành thời gian để đọc.
Cảm ơn câu trả lời của bạn, tôi cũng đã xem xét mã nguồn và thấy rằng tên db đã được mã hóa cứng. Tôi chỉ hy vọng tôi đã thiếu một cái gì đó đơn giản. Tôi sẽ thảo luận về đề nghị giải quyết vấn đề của bạn với các đồng nghiệp của tôi và xem liệu điều đó có thể làm việc cho chúng tôi hay không. –
Tên db được mã hóa là gì? –