Android:将搜索查询转发到处理搜索的单个活动

时间:2009-12-15 11:59:37

标签: android search android-activity

我有一个活动处理搜索( ACTIVITY_1 ),当我在此活动内/从此活动使用搜索(通过手机上的搜索按钮)时,该功能非常有效。

但是,当我通过实施onNewIntent从其他活动( ACTIVITY_2..x )使用搜索并将查询字符串转发到我的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 ,然后转到 ACTIVITY_2 的onCreate()。

  • 为什么它已经存在时重新创建 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 个答案:

答案 0 :(得分:11)

我不确定我是否了解您所描述的事件链,但是在这种情况下,您需要如何配置应用程序ACTIVITY_1是您在用户按下时始终要从所有其他活动启动的搜索活动“搜索”按钮。

假设搜索按钮在Activity1上完美运行,您只需要向应用程序添加一些粘合元数据,告诉您所有其他活动应使用ACTIVITY_1进行搜索,如下面的清单摘录中所示: / p>

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

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

</application>

使用此功能,您应该能够从除ACTIVITY_1之外的所有内容中删除intent-filters,并且您不需要在任何其他活动中使用onNewIntent处理程序。