첫 번째 끄기 : ConnectivityManager.CONNECTIVITY_ACTION
은 사용되지 않으며 connectivityManager.registerNetworkCallback
을 사용하는 방법을 알고 있습니다. 또한 JobScheduler
에 대해 읽는다면, 나는 그것이 옳은 것인지 잘 모르겠다.Android O - 백그라운드에서 연결 변경 감지
내 문제는 전화가 네트워크에 연결되거나 연결이 끊어진 경우 일부 코드를 실행하려고하는 것입니다. 앱이 백그라운드에서 작동 할 때 발생합니다. Android O부터 백그라운드에서 내가 원하지 않는 서비스를 실행하고 싶다면 알림을 표시해야합니다. JobScheduler/JobService
API를 사용하여 전화 연결/연결 끊기에 대한 정보를 얻으려고했지만 일정을 잡으면 실행됩니다. 나를 위해 그것은 같은 이벤트가 발생하면 코드를 실행할 수없는 것 같습니다. 이것을 달성 할 수있는 방법이 있습니까? 내 코드를 약간 조정해야 할까?
내 JobService :
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>
@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;
}
내가 같은 서비스가 시작 그러나 나는 그것을 발견 할 수 없다.
서비스를 포 그라운드에서 실행하지 않으려는 경우 올바르지 않습니다. 연결 관리자를 사용하십시오. 연결이 바뀌면 구체적으로 무엇을하려합니까? – tyczj
VPNService (또는 사용자가 구성 할 수있는 활동)를 시작하려고합니다. – Ch4t4r
'NetworkCallback' 객체가 아닌'PendingIntent'와 함께'registerNetworkCallback()'을 사용하고 있습니까? –