Как декларировать широковещательный приемник для многих видов деятельности? Android

Я хочу объявить Broadcast Receiver ко всем моим действиям приложения, чтобы обнаружить, когда происходит переход в Интернет. Как это делается? спасибо

манифест

 <receiver
            android:name=".managers.ConnectionReceiver"
            android:label="NetworkChangeReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

Класс расширяет BroadcastReceiver

public class ConnectionReceiver extends BroadcastReceiver {

    ConnectionListener connectionListener = new MainActivity();
    ConnectivityManager connectivityManager;
    NetworkInfo activeNetInfo;

    public ConnectionReceiver() {
}

@Override
public void onReceive(Context context, Intent intent) {
    connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    activeNetInfo = connectivityManager.getActiveNetworkInfo();
    if (activeNetInfo != null) {
        connectionListener.onConnect();
    }else{
        connectionListener.onDisconnect();
    }
}

android,android-activity,connection,broadcastreceiver,

0

Ответов: 3


1 принят

Самый простой способ - создать родительский класс для всех ваших действий, которые определяют это поведение и подкласс оттуда.

например...

class ConnectionListeningActivity extends Activity {

    protected boolean isConnected;

    BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
         void onReceive(Context context, Intent intent) {
              updateNetworkState();
         }
    };

    public void updateNetworkState() {
         ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

         NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
         isConnected = activeNetwork != null &&
                  activeNetwork.isConnectedOrConnecting();
    }

    public void onResume() {
        registerReceiver(broadcastReceiver, new IntentFilter(android.net.ConnectivityManager.CONNECTIVITY_ACTION));
        updateNetworkState();
    }

    public void onPause() {
        unregisterReceiver(broadcastReceiver);
    }

}

Здесь мы зарегистрировали метод broadcastReceiver в методе onResume и незарегистрировали его в onPause, чтобы он не был активен, когда активность не является.

Мы также обновляем статус isConnected в onResume, потому что мы можем или не можем получить networkStateChange перед первым использованием isConnected ..

теперь мы можем создать подкласс, который использует поле isConnected для выполнения некоторых действий.


0

Во всех действиях создайте экземпляр приемника вещания и зарегистрируйте широковещательный приемник.

ConnectionReceiver receiver = new ConnectionReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("ACTION HERE");
getApplicationContext().registerReceiver(receiver, filter)

ПРИМЕЧАНИЕ. Отмените регистрацию метода onStop (), поскольку метод onPause () вызывается в Android 7 во время многозадачности и регистрирует приемник снова в onStart () вместо onResume ()


0

Добавьте ниже строки в нужные действия.

  ConnectionReceiver receiver = new ConnectionReceiver();

    public void onResume(){
    super.onResume();
    registerReceiver(receiver ,new IntentFilter("action_to_perform"));
    }

    public void onPause(){
    super.onPause();
    unregisterreceiver(receiver);
    }
андроид, андроид-активность, соединение, BroadcastReceiver,
Похожие вопросы