Включить и отключить SEARCH_LONG_PRESS в приложениях Android

#android #android-manifest

#Android #android-манифест

Вопрос:

Я хочу, чтобы мое приложение открывалось при длительном нажатии кнопки поиска, но я хочу добавить опцию для деактивации этого.

Я добавил в свой shortcutActivity это:

 <intent-filter>
    <action android:name="android.intent.action.SEARCH_LONG_PRESS"/>
    <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
  

поэтому, когда я долго нажимаю кнопку поиска, она открывается, но теперь я должен иметь возможность включить эту функцию.

Это не основное действие, это действие просто вызывает основное, а затем finish() .

Как я могу это сделать?

Спасибо.

Комментарии:

1. Добро пожаловать в StackOverflow. Если вы считаете конкретный ответ полезным, пожалуйста, поддержите его. Если ответ является правильным ответом на ваш вопрос. Пожалуйста, примите это.

Ответ №1:

К сожалению, фильтры намерений являются статическими

Фильтр намерений является экземпляром класса IntentFilter . Однако, поскольку система Android должна знать о возможностях компонента, прежде чем она сможет запустить этот компонент, фильтры намерений обычно настраиваются не в коде Java, а в файле манифеста приложения (AndroidManifest.xml ) как элементы. (Единственным исключением могут быть фильтры для широковещательных приемников, которые регистрируются динамически путем вызова Context.registerReceiver() ; они создаются непосредственно как объекты IntentFilter.)

Это из документации IntentFilter.

Ответ №2:

На самом деле, это легко сделать с помощью PackageManager :

 ComponentName cnShortcutActivity = new ComponentName("my.package", "my.package.ShortcutActivity");
getPackageManager().setComponentEnabledSetting(cnShortcutActivity, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);