web-dev-qa-db-fra.com

Enregistrer et désinscrire le BroadcastReceiver dans la classe d'application

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

18
Anbu

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 )

38
Brian Yencho

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);
}
}
3

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);
}
1
Mohit Suthar