J'ai un récepteur de diffusion qui est enregistré dans la méthode onCreate () de Android classe Applcation mais comment désinscrire le même
exemple
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
registerReceiver(broadcastReceiver, new IntentFilter("TIMEZONE_CHANGED"));
}
Dans le code ci-dessus, je l'ai enregistré dans la méthode d'application onCreate () et il n'y a pas de méthode onDestroy ()/onStop () dans la classe Application pour désinscrire le broadcastReceiver.
Comment y parvenir
Vous n'avez pas besoin de vous désinscrire si vous souhaitez écouter pendant toute la durée d'exécution de l'application. De la documentation (à partir d'aujourd'hui):
Les récepteurs enregistrés dans le contexte reçoivent des émissions tant que leur contexte d'enregistrement est valide. Par exemple, si vous vous inscrivez dans un contexte d'activité, vous recevez des diffusions tant que l'activité n'est pas détruite. Si vous vous inscrivez dans le contexte de l'application, vous recevez des diffusions tant que l'application est en cours d'exécution.
( https://developer.Android.com/guide/components/broadcasts.html )
vous devez créer une BaseActivity.
Exemple
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
registerReceiver(broadcastReceiver, new IntentFilter("TIMEZONE_CHANGED"));
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(broadcastReceiver);
}
}
Et MainActivity étendent BaseActivity
exemple:
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Vous pouvez appeler unregister receiver dans la classe Application, seulement vous appelez comme ceci
dans votre MainActivity à l'intérieur de l'appel de méthode onDesctroy ()
@Override
protected void onDestroy() {
super.onDestroy();
((MyApplication) getApplication()).unregisterReceiver();
}
nous créons la méthode nregisterReceiver () dans votre classe MyApplication
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
registerReceiver(broadcastReceiver, new IntentFilter("TIMEZONE_CHANGED"));
}
public void unregisterReceiver() {
unregisterReceiver(broadcastReceiver);
}