下面列出了怎么用android.app.SearchManager的API类实例代码及写法,或者点击链接到github查看源代码。
private void updateSearchables() {
final int changingUserId = getChangingUserId();
synchronized (mSearchables) {
// Update list of searchable activities
for (int i = 0; i < mSearchables.size(); i++) {
if (changingUserId == mSearchables.keyAt(i)) {
mSearchables.valueAt(i).updateSearchableList();
break;
}
}
}
// Inform all listeners that the list of searchables has been updated.
Intent intent = new Intent(SearchManager.INTENT_ACTION_SEARCHABLES_CHANGED);
intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING
| Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
mContext.sendBroadcastAsUser(intent, new UserHandle(changingUserId));
}
public int getSuggestionSize() {
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setProjectionMap(mAliasMap);
queryBuilder.setTables(TABLE2_NAME);
Cursor c = queryBuilder.query(mSearchDBOpenHelper.getReadableDatabase(),
new String[]{"_ID",
SearchManager.SUGGEST_COLUMN_TEXT_1,
SearchManager.SUGGEST_COLUMN_TEXT_2,
SearchManager.SUGGEST_COLUMN_ICON_1,
SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID,
SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA},
null, null, null, null, null, "10"
);
return c.getCount();
}
@Override
public void onInternetSearch(String string) {
Intent intent = new Intent();
if (Tool.isIntentActionAvailable(_homeActivity.getApplicationContext(), Intent.ACTION_WEB_SEARCH) && !Setup.appSettings().getSearchBarForceBrowser()) {
intent.setAction(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, string);
} else {
String baseUri = Setup.appSettings().getSearchBarBaseURI();
String searchUri = baseUri.contains("{query}") ? baseUri.replace("{query}", string) : (baseUri + string);
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(searchUri));
}
try {
_homeActivity.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public String getType(@NonNull Uri uri) {
switch (sUriMatcher.match(uri)) {
// The application is querying the db for its own contents.
case VIDEO_WITH_CATEGORY:
return VideoContract.VideoEntry.CONTENT_TYPE;
case VIDEO:
return VideoContract.VideoEntry.CONTENT_TYPE;
// The Android TV global search is querying our app for relevant content.
case SEARCH_SUGGEST:
return SearchManager.SUGGEST_MIME_TYPE;
case REFRESH_SHORTCUT:
return SearchManager.SHORTCUT_MIME_TYPE;
// We aren't sure what is being asked of us.
default:
throw new UnsupportedOperationException("Unknown uri: " + uri);
}
}
private void setupSearchView(MenuItem searchItem) {
mSearchView.setIconifiedByDefault(false);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
if (searchManager != null) {
List<SearchableInfo> searchables = searchManager.getSearchablesInGlobalSearch();
SearchableInfo info = searchManager.getSearchableInfo(getComponentName());
for (SearchableInfo inf : searchables) {
if (inf.getSuggestAuthority() != null
&& inf.getSuggestAuthority().startsWith("applications")) {
info = inf;
}
}
mSearchView.setSearchableInfo(info);
}
mSearchView.setOnQueryTextListener(this);
mSearchView.setFocusable(false);
mSearchView.setFocusableInTouchMode(false);
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
webview.findAllAsync(query);
try {
for (Method m : WebView.class.getDeclaredMethods()) {
if (m.getName().equals("setFindIsUp")) {
m.setAccessible(true);
m.invoke((webview), true);
break;
}
}
} catch (Exception ignored) {
}
} else {
currentPathTitle = intent.getDataString().substring("file://".length());//.getStringExtra("fileName");
Log.d(TAG, "chmFilePath " + currentPathTitle);
Utils.chm = null;
listSite = new ArrayList<>();
initView();
initFile();
}
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
webview.findAllAsync(query);
try {
for (Method m : WebView.class.getDeclaredMethods()) {
if (m.getName().equals("setFindIsUp")) {
m.setAccessible(true);
m.invoke((webview), true);
break;
}
}
} catch (Exception ignored) {
}
} else {
chmFilePath = URLDecoder.decode(intent.getData().getPath());//.getStringExtra("fileName");
Log.d(TAG, "chmFilePath2 " + chmFilePath + ", intent " + intent);
Utils.chm = null;
listSite = new ArrayList<>();
initView();
initFile();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search, menu);
SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
MenuItem searchItem = menu.findItem(R.id.search_search);
searchItem.setOnActionExpandListener(this);
searchView = (SearchView) searchItem.getActionView();
if (searchManager != null) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setOnCloseListener(this);
searchView.setOnQueryTextListener(this);
}
return true;
}
private void setupSearchView() {
SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
SearchView searchView = (SearchView) findViewById(R.id.search_view);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconified(false);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
mSearchCityAdapter.getFilter().filter(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
mSearchCityAdapter.getFilter().filter(newText);
return true;
}
});
}
@Override
public void initData() {
ButterKnife.bind(this);
Intent intent = getIntent();
query = intent.getStringExtra(SearchManager.QUERY);
fm = getSupportFragmentManager();
SearchResultFragment fragment = (SearchResultFragment) fm.findFragmentById(R.id.fragment_container);
if (fragment == null) {
Bundle args = new Bundle();
args.putString("query",query);
fragment = SearchResultFragment.newInstance();
fragment.setArguments(args);
fm.beginTransaction().add(R.id.fragment_container,fragment).commit();
}
mPresenter = new SearchResultPresenter(fragment);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// If the search Activity exists, and another search
// is performed, set the launch Intent to the newly
// received search Intent.
setIntent(intent);
if (Intent.ACTION_VIEW.equals(getIntent().getAction())) {
// Update the selected search suggestion Id.
setSelectedSearchSuggestion(getIntent().getData());
}
else {
// Extract the search query and update the searchQuery Live Data.
String query = getIntent().getStringExtra(SearchManager.QUERY);
setSearchQuery(query);
}
}
public void onSearchWeb(){
String query = "";
if (Audio.Artists.CONTENT_TYPE.equals(mimeType)) {
query = getArtist();
} else if (Audio.Albums.CONTENT_TYPE.equals(mimeType)) {
query = getAlbum() + " " + getArtist();
} else if (Playlists.CONTENT_TYPE.equals(mimeType)) {
query = bundle.getString(PLAYLIST_NAME);
}
else{
Long id = bundle.getLong(BaseColumns._ID);
query = MusicUtils.parseGenreName(this, MusicUtils.getGenreName(this, id, true));
}
final Intent googleSearch = new Intent(Intent.ACTION_WEB_SEARCH);
googleSearch.putExtra(SearchManager.QUERY, query);
startActivity(googleSearch);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// Inflate the options menu from XML
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
// Use the Search Manager to find the SearchableInfo related
// to the Search Result Activity.
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchableInfo searchableInfo = searchManager.getSearchableInfo(
new ComponentName(getApplicationContext(),
EarthquakeSearchResultActivity.class));
SearchView searchView =
(SearchView)menu.findItem(R.id.search_view).getActionView();
searchView.setSearchableInfo(searchableInfo);
searchView.setIconifiedByDefault(false);
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// Inflate the options menu from XML
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
// Use the Search Manager to find the SearchableInfo related
// to the Search Result Activity.
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchableInfo searchableInfo = searchManager.getSearchableInfo(
new ComponentName(getApplicationContext(),
EarthquakeSearchResultActivity.class));
SearchView searchView =
(SearchView)menu.findItem(R.id.search_view).getActionView();
searchView.setSearchableInfo(searchableInfo);
searchView.setIconifiedByDefault(false);
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the options menu from XML
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
// Use the Search Manager to find the SearchableInfo related
// to this Activity.
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchableInfo searchableInfo =
searchManager.getSearchableInfo(getComponentName());
SearchView searchView =
(SearchView) menu.findItem(R.id.search_view).getActionView();
searchView.setSearchableInfo(searchableInfo);
searchView.setIconifiedByDefault(false);
return true;
}
private void setupSearchView(MenuItem searchItem) {
mSearchView.setIconifiedByDefault(false);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
if (searchManager != null) {
List<SearchableInfo> searchables = searchManager.getSearchablesInGlobalSearch();
SearchableInfo info = searchManager.getSearchableInfo(getComponentName());
for (SearchableInfo inf : searchables) {
if (inf.getSuggestAuthority() != null
&& inf.getSuggestAuthority().startsWith("applications")) {
info = inf;
}
}
mSearchView.setSearchableInfo(info);
}
mSearchView.setOnQueryTextListener(this);
mSearchView.setFocusable(false);
mSearchView.setFocusableInTouchMode(false);
}
protected IntentHandlerDelegate createIntentHandlerDelegate() {
return new IntentHandlerDelegate() {
@Override
public void processWebSearchIntent(String query) {
Intent searchIntent = new Intent(Intent.ACTION_WEB_SEARCH);
searchIntent.putExtra(SearchManager.QUERY, query);
startActivity(searchIntent);
}
@Override
public void processUrlViewIntent(String url, String referer, String headers,
TabOpenType tabOpenType, String externalAppId, int tabIdToBringToFront,
boolean hasUserGesture, Intent intent) {
}
};
}
private void processIntent(Intent intent) {
super.onNewIntent(intent);
String action = intent.getAction();
if (action != null && (action.equals(Intent.ACTION_SEARCH) || action.equals(SearchIntents.ACTION_SEARCH))) {
String query = intent.getStringExtra(SearchManager.QUERY);
if(query != null && query.length()>0){
FragmentManager fragmentManager = getSupportFragmentManager();
if(query.toLowerCase().contains(getString(R.string.product_voice_search).toLowerCase())){
fragmentManager.beginTransaction()
.replace(R.id.container, ProductsFragment.newInstance(2))
.commit();
} else if(query.toLowerCase().contains(getString(R.string.customer_voice_search).toLowerCase())){
fragmentManager.beginTransaction()
.replace(R.id.container, CustomersFragment.newInstance(1))
.commit();
} else {
fragmentManager.beginTransaction()
.replace(R.id.container, OrdersFragment.newInstance(1))
.commit();
}
}
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// If the search Activity exists, and another search
// is performed, set the launch Intent to the newly
// received search Intent.
setIntent(intent);
if (Intent.ACTION_VIEW.equals(getIntent().getAction())) {
// Update the selected search suggestion Id.
setSelectedSearchSuggestion(getIntent().getData());
}
else {
// Extract the search query and update the searchQuery Live Data.
String query = getIntent().getStringExtra(SearchManager.QUERY);
setSearchQuery(query);
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// If the search Activity exists, and another search
// is performed, set the launch Intent to the newly
// received search Intent.
setIntent(intent);
if (Intent.ACTION_VIEW.equals(getIntent().getAction())) {
// Update the selected search suggestion Id.
setSelectedSearchSuggestion(getIntent().getData());
}
else {
// Extract the search query and update the searchQuery Live Data.
String query = getIntent().getStringExtra(SearchManager.QUERY);
setSearchQuery(query);
}
}
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.games_fragment, menu);
if (getContext() == null) return;
SearchManager searchManager = (SearchManager) getContext().getSystemService(Context.SEARCH_SERVICE);
MenuItem item = menu.findItem(R.id.gamesFragment_search);
item.setOnActionExpandListener(this);
if (searchManager != null && getActivity() != null) {
searchView = (SearchView) item.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setOnCloseListener(this);
searchView.setOnQueryTextListener(this);
}
}
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.names_fragment, menu);
if (getContext() == null) return;
SearchManager searchManager = (SearchManager) getContext().getSystemService(Context.SEARCH_SERVICE);
MenuItem item = menu.findItem(R.id.namesFragment_search);
item.setOnActionExpandListener(this);
if (searchManager != null && getActivity() != null) {
searchView = (SearchView) item.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setOnCloseListener(this);
searchView.setOnQueryTextListener(this);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
// Get the SearchView and set the searchable configuration
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchMenuItem = menu.findItem(R.id.action_filter);
searchView = (SearchView) searchMenuItem.getActionView();
// Assumes current activity is the searchable activity
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setOnCloseListener(this);
searchView.setOnQueryTextListener(this);
// setOnSuggestionListener -> for selection of a suggestion
// setSuggestionsAdapter
searchView.setOnSearchClickListener(v -> setSearchMode(true));
return true;
}
@Override
protected void onNewIntent(Intent intent) {
if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_SEARCH)) {
if (mAdapter != null) {
String query = intent.getStringExtra(SearchManager.QUERY);
Fragment fragment = mAdapter.getItem(2);
if (fragment instanceof MoviesFragment) {
((MoviesFragment) fragment).restartWithSearchQuery(query);
}
fragment = mAdapter.getItem(3);
if (fragment instanceof TVShowFragment) {
((TVShowFragment) fragment).restartWithSearchQuery(query);
}
if (mSearchView != null) {
mSearchView.setQuery(query, false);
mSearchView.clearFocus();
}
}
} else {
super.onNewIntent(intent);
}
}
/**
* Checks whether the global search provider with a given
* component name is installed on the system or not. This deals with
* cases such as the removal of an installed provider.
*/
private boolean isInstalled(ComponentName globalSearch) {
Intent intent = new Intent(SearchManager.INTENT_ACTION_GLOBAL_SEARCH);
intent.setComponent(globalSearch);
List<ResolveInfo> activities = queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
if (activities != null && !activities.isEmpty()) {
return true;
}
return false;
}
@Override
public Cursor query(final Uri uri, String[] projection, String selection, final String[] selectionArgs, String sortOrder) {
Logger.d("TAG", "query: " + selectionArgs[0]);
Cursor c = super.query(uri, projection, selection, selectionArgs, sortOrder);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ECLAIR_MR1 && c != null) {
BlockingQueue<MatrixCursor> arrayBlockingQueue = new ArrayBlockingQueue<MatrixCursor>(1);
WebSocketSingleton.getInstance().setNotificationUri(uri).setContext(getContext()).setBlockingQueue(arrayBlockingQueue);
MatrixCursor matrix_cursor = null;
WebSocketSingleton.getInstance().send(selectionArgs[0]);
try {
matrix_cursor = arrayBlockingQueue.poll(5, TimeUnit.SECONDS);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
matrix_cursor.newRow().add(c.getString(c.getColumnIndex(android.app.SearchManager.SUGGEST_COLUMN_ICON_1))).add(c.getString(c.getColumnIndex(SearchManager.SUGGEST_COLUMN_TEXT_1))).add(c.getString(c.getColumnIndex(SearchManager.SUGGEST_COLUMN_QUERY))).add("1");
}
} catch (InterruptedException e) {
Logger.printException(e);
} finally {
c.close();
}
return matrix_cursor;
} else {
return null;
}
}
/**
* Called when your activity's options menu needs to be updated.
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
MenuItem item;
// first, get rid of our menus (if any)
menu.removeItem(0);
menu.removeItem(1);
// next, add back item(s) based on current menu mode
switch (mMenuMode.getSelectedItemPosition())
{
case MENUMODE_SEARCH_KEY:
item = menu.add( 0, 0, 0, "(Search Key)");
break;
case MENUMODE_MENU_ITEM:
item = menu.add( 0, 0, 0, "Search");
item.setAlphabeticShortcut(SearchManager.MENU_KEY);
break;
case MENUMODE_TYPE_TO_SEARCH:
item = menu.add( 0, 0, 0, "(Type-To-Search)");
break;
case MENUMODE_DISABLED:
item = menu.add( 0, 0, 0, "(Disabled)");
break;
}
item = menu.add(0, 1, 0, "Clear History");
return true;
}
@Override
public void onNewIntent(Intent intent) {
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
// from click on search results
Intent resultValue = new Intent();
resultValue.putExtra("symbol", intent.getDataString());
setResult(RESULT_OK, resultValue);
finish();
} else if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
ListAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, new String[]{String.format("Symbol \'%s\' is not found. Press to add it anyway.", intent.getStringExtra(SearchManager.QUERY))});
setListAdapter(adapter);
} else if (Intent.ACTION_EDIT.equals(intent.getAction())) {
startSearch(SearchManager.QUERY, false, null, false);
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
String action = intent.getAction();
if (action != null)
switch (action) {
case "android.intent.action.SEARCH":
this.searchQuery = intent.getStringExtra(SearchManager.QUERY);
this.refresh();
break;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
android.support.v7.widget.SearchView searchView =
(android.support.v7.widget.SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.search));
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
if (query == null) {
menu.findItem(R.id.search).expandActionView();
}
return super.onCreateOptionsMenu(menu);
}