2017-01-25 3 views
0

На Android 7, я знаю, что я должен зарегистрировать CONNECTIVITY_ACTION приемник программно, а не в явнойCONNECTIVITY_ACTION приемник выключается в момент зарегистрировать его

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

в моем классе приложения я делаю это:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION); 
     registerReceiver(new NetworkUpdateReceiver(), filter); 
    } 

, а затем метод onReceive называется сразу:

public class NetworkUpdateReceiver extends BroadcastReceiver { 

    private Context context; 


    @Override 
    public void onReceive(Context context, Intent intent) { 
     this.context = context; 
     Log.e("NetworkUpdateReceiver", "onReceive"); 

После того, что он работает нормально - я получаю вызов метода каждый раз, когда в сеть включена или выключена

+1

Это, вероятно, липкая трансляция. Не так много можно сделать по этому поводу. – CommonsWare

+1

Из любопытства, в чем проблема с этим немедленно уволить? Независимо от того, что делает ваш обработчик, все равно нужно обрабатывать событие так же, будь то сейчас или позже. Это не так просто, как переключение туда и обратно ... если это то, что вы делаете с ним. –

+0

Проблема в том, что приложение выполняет серию событий всякий раз, когда становится доступной сеть, что происходит позже, но не каждый раз, когда приложение загружается в память. Мне показалось, что было бы легче предотвратить его отключение каждый раз, вместо того чтобы внедрять логику обхода –

ответ

1

BroadcastReceiver.java имеет метод isInitialStickyBroadcast(), поэтому для ig nore Изменение связи при регистрации ресивера вы можете написать такой код:

public class NetworkUpdateReceiver extends BroadcastReceiver { 

private Context context; 


@Override 
public void onReceive(Context context, Intent intent) { 
    this.context = context; 
    if (isInitialStickyBroadcast()) { 
     Log.i("NetworkUpdateReceiver", "onReceive ignored, sticky"); 
     return; 
    } 
    Log.i("NetworkUpdateReceiver", "Actual onReceive"); 
Смежные вопросы