Как отменить регистрацию BroadcastReceiver из Activity

Это, вероятно, очень простой вопрос, но я, кажется, зациклился на этом с дня. Итак, вот вопрос:

Как отменить регистрацию BroadcastReceiver в Activity, который был зарегистрирован в файле AndroidManifest? Вот код::

 <receiver  android:name=".PhoneCallReceiver">
        <intent-filter  >
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
    </receiver>

Я знаком с функцией

public void unregisterReceiver (приемник BroadcastReceiver)

но он выдает исключение, если он не зарегистрирован в этом действии с помощью

IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.PHONE_STATE");
registerReceiver(mybroadcast, filter);

person Name is Nilay    schedule 11.02.2013    source источник
comment
Попробуйте отменить его регистрацию в объекте приложения. Я думаю, что получатели в манифесте прописаны в приложении.   -  person Gabe Sechan    schedule 11.02.2013
comment
@GabeSechan-я не понимаю...можешь дать мне какой-нибудь код..??   -  person Name is Nilay    schedule 11.02.2013
comment
getApplication (). UnregisterReceiver (получатель); Объект Application также позволяет зарегистрировать получателя и отменить его регистрацию. Если вы регистрируете приемник через манифест, он регистрируется в контексте приложения, а не в контексте действия.   -  person Gabe Sechan    schedule 11.02.2013
comment
@NilayOnAndroid: см. Android - как отменить регистрацию созданного приемника в манифесте? опубликовать   -  person ρяσѕρєя K    schedule 11.02.2013
comment
@GabeSechan-Это выдает мне: java.lang.IllegalArgumentException: Получатель не зарегистрирован, исключение !!!   -  person Name is Nilay    schedule 11.02.2013
comment
Что произойдет, если я не отменю регистрацию широковещательного приемника? Будет ли он оставаться активным даже после перезагрузки телефона?   -  person Jaydev    schedule 15.11.2016
comment
@Jaydev, нет, он не останется активным после перезагрузки телефона. Но Android предупредит вас об отмене регистрации сразу после вызова onPause этой активности. Как правило, это лучшая практика для подражания.   -  person Name is Nilay    schedule 15.11.2016


Ответы (2)


Чтобы отключить receiver, который был определен в manifest, используйте следующее:

PackageManager pm = context.getPackageManager();
ComponentName component = new ComponentName(context, PhoneCallReceiver.class)
pm.setComponentEnabledSetting(component , PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP);
person iTech    schedule 11.02.2013
comment
@iTech- Мне не нужно упоминать, регистрацию какого приемника действий мне нужно отменить ... например: вот это «android.intent.action.PHONE_STATE» !! - person Name is Nilay; 11.02.2013
comment
Вы указываете класс приемника PhoneCallReceiver.class, которого достаточно, чтобы определить, какой приемник отключить - person iTech; 11.02.2013

Попробуй это:

public void onResume()
  {
    IntentFilter filter = new IntentFilter();
    filter.addAction("android.intent.action.PHONE_STATE");
    registerReceiver(mybroadcast, filter);  

  }

  public void onPause()
  {
    unregisterReceiver(mybroadcast);
  }
person user1744952    schedule 11.02.2013
comment
Я не могу зарегистрировать его из Activity, если я зарегистрировал его из AndroidManifest.xml !! - person Name is Nilay; 11.02.2013