Android: переадресуйте поисковые запросы в одно действие, которое обрабатывает поиск - PullRequest
4 голосов
/ 15 декабря 2009

У меня есть поиск обработки активности ( ACTIVITY_1 ), который отлично работает, когда я использую поиск (с помощью кнопки ПОИСК на телефоне) в / из этой операции.

Однако, когда я использую поиск из другого действия ( ACTIVITY_2..x ) путем реализации onNewIntent и пересылаю строку запроса в мой класс Search_Activity.class ( ACTIVITY_1 )

@Override
protected void onNewIntent(Intent intent) {
    Log.i(TAG, "onNewIntent()");

    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        Log.i(TAG, "===== Intent: ACTION_SEARCH =====");
        Intent myIntent = new Intent(getBaseContext(), Search_Activity.class);
        myIntent.setAction(Intent.ACTION_SEARCH);
        myIntent.putExtra(SearchManager.QUERY, intent.getStringExtra(SearchManager.QUERY));
        startActivity(myIntent);
    }

}

сначала всегда останавливается ACTIVITY_2 , а затем переходит к onCreate () из ACTIVITY_2 .

  • Почему он воссоздает мой ACTIVITY_2 , когда он уже существует и не переходит в onNewIntent напрямую?
  • Есть ли другой способ перенаправления поисковых запросов непосредственно на ACTIVITY_1 ? Например, через настройку в Manifest.xml
  • Можно ли вообще перенаправлять все поисковые запросы на ACTIVITY_1 , даже не вводя onNewIntent во всех других действиях?

В настоящее время я должен поставить <intent-filter> в каждое отдельное действие, чтобы «активировать» там свой пользовательский поиск и затем перенаправить запрос в действие, которое обрабатывает поиск через onNewIntent (как показано выше).

<activity android:name=".Another_Activity"
    android:theme="@style/MyTheme">
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <meta-data android:name="android.app.searchable"
        android:resource="@xml/searchable" />
</activity>

1 Ответ

11 голосов
/ 15 декабря 2009

Я не уверен, что понимаю цепочку событий, которые вы описываете, но вот как вам нужно настроить приложение в случае, если ACTIVITY_1 - это поисковое действие, которое вы всегда хотите запустить из всех других ваших действий, когда пользователь нажимает Кнопка «Поиск».

Предполагая, что кнопка поиска отлично работает в Activity1, вам просто нужно добавить немного склеенных метаданных в ваше приложение, сообщая, что все ваши другие Activity должны использовать ACTIVITY_1 для поиска, как показано во фрагменте манифеста ниже:

<application>
  <meta-data 
     android:name="android.app.default_searchable"
     android:value=".ACTIVITY_1" />

   <!-- All your activities, service, etc. -->

</application>

Используя это, вы сможете удалить фильтры намерений из всех, кроме ACTIVITY_1, и вам не нужно будет использовать обработчик onNewIntent в любых других ваших действиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...