1

2 種類の提案を処理するように SearchRecentSuggestionsProvider を拡張する方法に関する情報を探しています。

  • ユーザー検索履歴
  • 可能な提案として常に持っておきたい事前定義された用語

たとえば、ユーザーが「Goo」と入力し始めたとき、そのユーザーは以前に「Goo Gone」を検索したことがあるかもしれません。また、「Google」も「特別な用語」のリストにあるので、含めたいと思うかもしれません。

Googleのドキュメントを参照すると、Google のコードを使用するか、独自の SQLite データベースをロールして物事を保存することができることがわかります。私がやりたいことをするために SearchRecentSuggestionsProvider の一部をオーバーライドする方法はありますか?

4

1 に答える 1

1

はい、SearchRecentSuggestionsProviderを独自のクラスで拡張できます。これは私がこれを行うために書いたクラスです:https ://github.com/bostonbusmap/bostonbusmap/blob/master/src/boston/Bus/Map/provider/TransitContentProvider.java

package boston.Bus.Map.provider;

import boston.Bus.Map.data.RoutePool;
import boston.Bus.Map.main.Main;
import boston.Bus.Map.provider.DatabaseContentProvider.DatabaseAgent;
import boston.Bus.Map.transit.TransitSystem;
import android.app.SearchManager;
import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.SearchRecentSuggestionsProvider;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;

public class TransitContentProvider extends SearchRecentSuggestionsProvider {

    private UriMatcher matcher;

    public static final String AUTHORITY = "com.bostonbusmap.transitprovider";
    public static final int MODE = SearchRecentSuggestionsProvider.DATABASE_MODE_QUERIES;


    private static final int SUGGESTIONS_CODE = 5;

    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);

    public TransitContentProvider()
    {
        matcher = new UriMatcher(UriMatcher.NO_MATCH);

        matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, SUGGESTIONS_CODE);
        setupSuggestions(AUTHORITY, MODE);
    }

    @Override
    public boolean onCreate() {
        boolean create = super.onCreate();
        return create;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder)
    {
        int code = matcher.match(uri);
        switch (code)
        {
        case SUGGESTIONS_CODE:
            if (selectionArgs == null || selectionArgs.length == 0 || selectionArgs[0].trim().length() == 0)
            {
                return super.query(uri, projection, selection, selectionArgs, sortOrder);
            }
            else
            {
                ContentResolver resolver = getContext().getContentResolver();
                return DatabaseAgent.getCursorForSearch(resolver, selectionArgs[0]);
            }
        default:
            return super.query(uri, projection, selection, selectionArgs, sortOrder);
        }
    }
}
于 2012-06-14T04:16:10.103 に答える