android:label="@string/sms_search"android:hint="@string/sms_search"android:searchSuggestAuthority="com.charon.MyProvider"//自定义的Providerandroid:searchSuggestSelection=" ?" >
android:name="android.app.searchable"android:resource="@xml/searchable" />
在这个Activity中的内容要这样
Intent intent = getIntent();//如果是从搜索开启的这个页面就获取到搜索框中输入的内容if (Intent.ACTION_SEARCH.equals(intent.getAction())) {//获取到在搜索框中输入的内容String query = intent.getStringExtra(SearchManager.QUERY);//执行搜索的方法doMySearch(query);Log.i("i", " query " + query);}
public class MyProvider extends SearchRecentSuggestionsProvider {//指定查询的authoritypublic final static String AUTHORITY = "com.charon.MyProvider";//指定数据库的操作是查询的方式public final static int MODE = DATABASE_MODE_QUERIES;public MySuggestionProvider() {setupSuggestions(AUTHORITY, MODE);}//然后重写SearchRecentSuggestionsProvider中的方法,有增删改查四个方法private final static String[] sms_projection = new String[]{Sms._ID,Sms.ADDRESS,Sms.BODY};private final static String[] columnNames = new String[]{BaseColumns._ID,SearchManager.SUGGEST_COLUMN_TEXT_1, //指定搜索自动提示的框的样式SearchManager.SUGGEST_COLUMN_TEXT_2,SearchManager.SUGGEST_COLUMN_QUERY}; //这个参数能够让点击某个搜索提示的时候自动让搜索内容变成点击的条目的内容@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {if(selectionArgs != null){String query = selectionArgs[0];if(TextUtils.isEmpty(query)){return null;}Uri uri1 = Sms.CONTENT_URI;String where = Sms.BODY + " like '%" + query + "%'";Cursor cursor = getContext().getContentResolver().query(uri1, sms_projection, where, null, Sms.DATE + " desc ");return changeCursor(cursor);}return null;}private Cursor changeCursor(Cursor cursor){MatrixCursor result = new MatrixCursor(columnNames);if(cursor != null){while(cursor.moveToNext()){Object[] columnValues = new Object[]{cursor.getString(cursor.getColumnIndex(Sms._ID)),cursor.getString(cursor.getColumnIndex(Sms.ADDRESS)),cursor.getString(cursor.getColumnIndex(Sms.BODY)),cursor.getString(cursor.getColumnIndex(Sms.BODY))}; //点击时候让内容变为短信内容result.addRow(columnValues);}}return result;}}
android:name="android.app.default_searchable"android:value=".SearchableActivity" />
在Activtity中有一个onSearchRequested方法,执行此方法时能够激活搜索框,所以在点击搜索按钮时执行此方法即可