в манифесте ...

рвых, я знаю, чтоConnectivityManager.CONNECTIVITY_ACTION устарела, и я знаю, как использоватьconnectivityManager.registerNetworkCallback, Кроме того, если читать оJobScheduler, но я не совсем уверен, правильно ли я понял.

Моя проблема в том, что я хочу выполнить некоторый код, когда телефон подключен / отключен от сети. Это должно происходить, когда приложение находится в фоновом режиме. Начиная с Android O, мне нужно было бы показать уведомление, если я хочу запустить службу в фоновом режиме, чего я хочу избежать.
Я пытался получить информацию, когда телефон подключается / отключается с помощьюJobScheduler/JobService API, но он запускается только тогда, когда я планирую это. Мне кажется, что я не могу запустить код, когда происходит подобное событие. Есть ли способ добиться этого? Должен ли я просто немного скорректировать свой код?

Мой JobService:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class ConnectivityBackgroundServiceAPI21 extends JobService {

    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        LogFactory.writeMessage(this, LOG_TAG, "Job was started");
        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
        if (activeNetwork == null) {
            LogFactory.writeMessage(this, LOG_TAG, "No active network.");
        }else{
            // Here is some logic consuming whether the device is connected to a network (and to which type)
        }
        LogFactory.writeMessage(this, LOG_TAG, "Job is done. ");
        return false;
    }
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
    LogFactory.writeMessage(this, LOG_TAG, "Job was stopped");
    return true;
}

Я запускаю сервис так:

JobScheduler jobScheduler = (JobScheduler)context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
ComponentName service = new ComponentName(context, ConnectivityBackgroundServiceAPI21.class);
JobInfo.Builder builder = new JobInfo.Builder(1, service).setPersisted(true)
    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY).setRequiresCharging(false);
jobScheduler.schedule(builder.build());
            jobScheduler.schedule(builder.build()); //It runs when I call this - but doesn't re-run if the network changes

Манифест (Аннотация):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
    <uses-permission android:name="android.permission.VIBRATE" />

    <application>
        <service
            android:name=".services.ConnectivityBackgroundServiceAPI21"
            android:exported="true"
            android:permission="android.permission.BIND_JOB_SERVICE" />
    </application>
</manifest>

Я думаю, что должно быть простое решение, но я не могу его найти.

Ответы на вопрос(2)

Ваш ответ на вопрос