Изменить форму BroadcastReceiver для JobScheduler - PullRequest
0 голосов
/ 02 октября 2018

Я работаю над небольшим приложением WebView для Android.Для проверки подключения к Интернету приложение использует Broadcastreceiver на уровне приложения.Проблема в том, что BroadcastReceiver по-прежнему активен, даже если приложение закрывается и аварийно завершает работу с NullPointerException.Я быстро понял это, но это не лучший способ сделать это.

Для решения дальнейших проблем и повышения уровня кодирования я хочу изменить свой BroadcastReceiver с уровня приложения на уровень активности с помощьюJobScheduler.Но это довольно сложно.Я не могу указать пункт или описание, с чего начать.Кто-нибудь делал это раньше и может мне помочь?

Код моего Broadcastreceiver:

Androidmanifest.xml

        <application
    ...
    <receiver
        android:name=".helper.NetworkChangeReceiver"
        android:label="NetworkChangeReceiver">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
            <action android:name="android.net.wifi.STATE_CHANGE" />
        </intent-filter>
    </receiver>

</application>

NetworkChangeReceiver.java

public class NetworkChangeReceiver extends BroadcastReceiver {

public interface NetworkChangeCallback {
    void networkChange(int conn);
}

public static NetworkChangeCallback networkChangeCallback;

public static void setInterface(Context context) {
    networkChangeCallback = (NetworkChangeCallback)context;
}

@Override
public void onReceive(final Context context, final Intent intent) {
    int conn = NetworkUtil.getConnectivityStatus(context);
    String status = NetworkUtil.getConnectivityStatusString(context);

    Log.i("WIFISTATE ACTION",intent.getAction());
    Log.i("WIFISTATE STATUS",status);
    if(networkChangeCallback!=null) {
        networkChangeCallback.networkChange(conn);
    }
}
}

Я благодарен за любую помощь

1 Ответ

0 голосов
/ 02 октября 2018

Вы должны вызвать приемник явно, потому что неявно приемник не работает в операционной системе oreo и выше. В OnStart() методе вы должны вызывать явно, как в следующем, а затем при onStop() или onPause() необходимо отменить регистрацию получателя

Для регистрации:

    IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
    receiver = new NetworkChangeReceiver ();
    getActivity().registerReceiver(receiver, filter);

Для отмены регистрации:

   try {

        getActivity().unregisterReceiver(receiver);
        BalanceReceiver=null;

        registeredReceivers.clear();
    } catch (Exception e) {

    }

Надеюсь, это вам поможет.

...