1

我的应用程序提供的功能之一是在长按搜索按钮时选择要在后台完成的事情。即使此功能未在我的应用程序的设置屏幕中激活,执行此操作的活动也会出现在搜索长按选项中。在这种情况下,有没有办法让我的应用程序选项不以编程方式出现在搜索长按选项中?

这就是我在清单中定义我的活动的方式:

       <activity
            android:name="com.bill.deuterh.SearchButtonActivity"
             android:theme="@style/Theme.Transparent"
            android:label="@string/title_activity_search_button" >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.DEFAULT"/>
             </intent-filter>
             <intent-filter>
                 <action android:name="android.intent.action.SEARCH_LONG_PRESS"/>
                 <category android:name="android.intent.category.DEFAULT"/>
             </intent-filter>
        </activity>
4

1 回答 1

0

像这样将你<intent-filter>分成 2 个单独Activity的 s:

  <activity
        android:name="com.bill.deuterh.SearchButtonActivity"
         android:theme="@style/Theme.Transparent"
        android:label="@string/title_activity_search_button" >
         <intent-filter>
             <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.DEFAULT"/>
         </intent-filter>
    </activity>

    <activity-alias
        android:targetActivity="com.bill.deuterh.SearchButtonActivity"
        android:name="com.bill.deuterh.SearchButtonActivityAlias"
        android:enabled="false"
        android:label="@string/title_activity_search_button">
         <intent-filter>
             <action android:name="android.intent.action.SEARCH_LONG_PRESS"/>
             <category android:name="android.intent.category.DEFAULT"/>
         </intent-filter>
    </activity-alias>

您会注意到别名有enabled="false",这意味着它的默认状态Activity是禁用的。在这种状态下,它不会出现在搜索长按选项列表中。

当您想要启用搜索活动以使其显示在列表中时,您只需使用 启用别名组件PackageManager,如下所示:

    PackageManager pm = getPackageManager();
    pm.setComponentEnabledSetting(new ComponentName(this,
            "com.bill.deuterh.SearchButtonActivityAlias"),
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);

如果你想再次禁用它,你可以这样做:

    PackageManager pm = getPackageManager();
    pm.setComponentEnabledSetting(new ComponentName(this,
            "com.bill.deuterh.SearchButtonActivityAlias"),
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);
于 2014-01-27T18:32:02.743 回答