2011-01-28 3 views
9

내 앱에 SearchManager으로 구현 된 두 가지 검색 활동이 있습니다. 하나는 전체 앱에서 검색 가능한 기본값이고 다른 하나는 하나의 활동에만 사용됩니다. 이 두 검색은 서로 다른 데이터의 검색을 수행하며 서로 다른 두 검색에 검색 기록을 공유하는 것은 의미가 없습니다. 앱 내에서 서로 다른 두 가지 검색 기능이 기능적으로 잘 작동하고 있으며 최근 검색 기록이 있습니다.Android 앱의 SearchRecentSuggestionsProvider 클래스를 여러 개 사용할 수 있습니까?

두 개의 서로 다른 SearchRecentSuggestionsProvider 클래스가 앱 내에 정의되어 있지만 하나의 검색은 두 검색의 최근 검색 제안 기록에 모두 표시됩니다. 개발자 가이드의 SearchManager 주제를 읽었지만 여러 제안 제공자에 대한 정보는 볼 수 없습니다. 여기

노드에서의 AndroidManifest.xml에있는 두 개의 업체입니다

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); 
    } 
    } 

합니다 (SearchTwoRecentSuggestionsProvider 클래스는 정확히 같은 모양 : 여기

<provider android:name=".SearchOneRecentSuggestionsProvider" 
android:authorities="com.company.SearchOneRecentSuggestionsProvider"></provider> 
<provider android:name=".SearchTwoRecentSuggestionsProvider" 
    android:authorities="com.company.SearchTwoRecentSuggestionsProvider"></provider> 

이 SearchOneRecentSuggestionsProvider.java에 정의 된 클래스의 One with Two를 제외하고는 자신의 SearchTwoRecentSuggestionsProvider.java 파일에 있습니다.)

(/data/data/com.company/databases/suggestions.db에서) 검색 제안 데이터베이스 내부 :

SearchRecentSuggestionsProvider에 대한 열이 없습니다
# 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 

, 그래서 아마도이 개 검색의 역사를 분리 할 수있는 방법이 없습니다 ?

두 가지 검색 중 하나에서 검색을 수행하면 최근 검색 기록 제안에서 searchone과 searchtwo가 모두 표시됩니다. 나는 가능하다면 각자 자신의 역사가 있기를 바란다. 잘만되면 나는 바보 같은 것을 놓치지 않았다! 이것을 읽어 주셔서 감사합니다.

답변

1

가 보이는 ...

그러나 그것은 트릭, 그리고 나는 이런 식으로 작동 할 것이라고 100 % 확신한다. 동일한 문제로 SO를 검색하는 사용자는 Google의 향후 업데이트에 대해 https://code.google.com/p/android/issues/detail?id=13501을 참조하십시오.

2

은 내가 SearchRecentSuggestionsProviderSearchRecentSuggestions 소스 코드를보고, 분명히 이러한 클래스는 당신이 그렇게 쓸모가 같은 응용 프로그램에서 여러 SearchRecentSuggestionsProvider를 사용하여 여러 공급자 여부를 (사용하는 경우 관련없이 모든 응용 프로그램 사이에 공통 데이터베이스를 사용하도록 설계되었습니다). 두 가지 다른 데이터베이스를 사용할 방법을 찾을 수 없습니다.

하지만 saveRecentQuery()로 저장할 때 각 쿼리의 시작 부분에 문자 (예 : 최근 활동 1의 검색 및 2 최근 검색)가 추가되었습니다. activity1에 있다면 saveRecentQuery ('1'+ query, ...)를 수행합니다.

그런 다음 SearchRecentSuggestionsProvider.query()를 재정의하십시오. 여기서 첫 번째 문자 '1'또는 '2'의 값에 따라 표시 할 행을 필터링 할 수 있습니다 (물론 문자열에서 제거해야합니다.). 당신이 활동 1에 있다면 '1'로 시작하는 값만을 유지하고 싶습니다. 이렇게하면 여러 제안 목록을 처리 할 수 ​​있습니다. 그것은이 시점에서 불가능처럼

+0

답변을 주셔서 감사합니다. 또한 소스 코드를 살펴본 결과 db 이름이 하드 코드 된 것을 확인했습니다. 방금 내가 간단한 것을 놓치기를 바랐다. 동료들과 함께 해결 방법에 대한 제안을 논의하고 이것이 우리에게 도움이되는지 확인해 보겠습니다. –

+0

하드 코드 된 db 이름은 무엇입니까? –

관련 문제