: firebase JobDispatcher ( @cutiko). :
public class ConnectivityJob extends JobService{
@Override
public boolean onStartJob(JobParameters job) {
LogFactory.writeMessage(this, LOG_TAG, "Job created");
connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
connectivityManager.registerNetworkCallback(new NetworkRequest.Builder().build(), networkCallback = new ConnectivityManager.NetworkCallback(){
});
}else{
registerReceiver(connectivityChange = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
handleConnectivityChange(!intent.hasExtra("noConnectivity"), intent.getIntExtra("networkType", -1));
}
}, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
if (activeNetwork == null) {
LogFactory.writeMessage(this, LOG_TAG, "No active network.");
}else{
}
LogFactory.writeMessage(this, LOG_TAG, "Done with onStartJob");
return true;
}
@Override
public boolean onStopJob(JobParameters job) {
if(networkCallback != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)connectivityManager.unregisterNetworkCallback(networkCallback);
else if(connectivityChange != null)unregisterReceiver(connectivityChange);
return true;
}
private void handleConnectivityChange(NetworkInfo networkInfo){
}
private void handleConnectivityChange(boolean connected, int type){
}
private void handleConnectivityChange(boolean connected, ConnectionType connectionType){
}
private enum ConnectionType{
MOBILE,WIFI,VPN,OTHER;
}
}
( ):
Job job = dispatcher.newJobBuilder().setService(ConnectivityJob.class)
.setTag("connectivity-job").setLifetime(Lifetime.FOREVER).setRetryStrategy(RetryStrategy.DEFAULT_LINEAR)
.setRecurring(true).setReplaceCurrent(true).setTrigger(Trigger.executionWindow(0, 0)).build();
: . . , :
- , , startForeground (, )
stopForeground , , Android - ,
startService - : , , (, ).
- onTaskRemoved , , . , ,
onTaskRemoved, .
, , . . , (, ?), ( , !).
, :
- Android 7.0
CONNECTIVITY_ACTION , , . , , , , ( ). , connectivityManager.registerNetworkCallback - Android 8.0 , , , .
:
:
connectivityManager.registerNetworkCallback(NetworkInfo, PendingIntent) , PendingIntent , ;
VPNService, (, , ), , , VPNService . , .
, 8.0 , , ( JobService), . ( , , , "XX ", ). |
- , .