Android – как отменить регистрацию получателя, созданного в манифесте?

Я знаю об использовании registerReceiver и unregisterReceiver в Java-коде для работы с приемниками, но, допустим, в моем манифесте есть следующее:

     

Есть ли способ, чтобы я мог отменить это где-нибудь в Java-коде? Могу ли я дать ему атрибут id или что-то еще, а затем получить его и отменить его? Я спрашиваю, потому что я хочу, чтобы мое приложение что-то делало только в первый раз, когда это действие происходит, затем отмените регистрацию и перепишите его позже на Java.

Надеюсь, я сделал это ясно, спасибо за любую помощь.

Вы можете использовать PackageManager для включения / выключения BroadcastReceiver в объявлении в манифесте. Broadcast Receiver будет запущен только тогда, когда он включен.

Используйте это для создания компонента

 ComponentName component = new ComponentName(context, MyReceiver.class); 

Проверьте, включен ли компонент или отключен

 int status = context.getPackageManager().getComponentEnabledSetting(component); if(status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) { Log.d("receiver is enabled"); } else if(status == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) { Log.d("receiver is disabled"); } 

Включить / отключить компонент (широковещательный приемник в вашем случае)

 //Disable context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP); //Enable context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED , PackageManager.DONT_KILL_APP); 

Основываясь на ответе Варуна, я создал этот утилитарный метод

 private void unregisterReceiverFromManifest(Class clazz, final Context context) { final ComponentName component = new ComponentName(context, clazz); final int status = context.getPackageManager().getComponentEnabledSetting(component); if(status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) { context.getPackageManager() .setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } } 
  • Android BroadcastReceiver при запуске - продолжайте работать, когда Activity находится в фоновом режиме
  • Информировать активность из BroadcastReceiver ТОЛЬКО, если он находится на переднем плане
  • Android BroadcastReceiver в действии
  • Сохранять широковещательный приемник после закрытия приложения
  • Не удается определить, когда на исходящий вызов отвечает Android
  • Давайте будем гением компьютера.