在Android 7及更高版本中未检测到Wifi连接更改

时间:2018-07-10 06:16:40

标签: java android-studio

Main2Activity.class

private void scheduleJob(){

    JobInfo myJob = null;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        myJob = new JobInfo.Builder(0, new ComponentName(this, NetworkSchedulerService.class))
                .setRequiresCharging(true)
                .setMinimumLatency(1000)
                .setOverrideDeadline(2000)
                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                .setPersisted(true)
                .build();
        JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
        jobScheduler.schedule(myJob);
    }



}

@Override
protected void onStop() {
    // A service can be "started" and/or "bound". In this case, it's "started" by this Activity
    // and "bound" to the JobScheduler (also called "Scheduled" by the JobScheduler). This call
    // to stopService() won't prevent scheduled jobs to be processed. However, failing
    // to call stopService() would keep it alive indefinitely.
    stopService(new Intent(this, NetworkSchedulerService.class));
    super.onStop();
}
@Override
protected void onStart() {
    super.onStart();
    // Start service and provide it a way to communicate with this class.
    Intent startServiceIntent = new Intent(this, NetworkSchedulerService.class);
    startService(startServiceIntent);
}

公共类NetworkSchedulerService扩展JobService实现         ConnectivityReceiver.ConnectivityReceiverListener {

private static final String TAG = NetworkSchedulerService.class.getSimpleName();

private ConnectivityReceiver mConnectivityReceiver;

@Override
public void onCreate() {
    super.onCreate();
    Log.i(TAG, "Service created");
    mConnectivityReceiver = new ConnectivityReceiver(this);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.i(TAG, "onStartCommand");
    return START_NOT_STICKY;
}
@Override
public boolean onStartJob(JobParameters params) {
    Log.i(TAG, "onStartJob" + mConnectivityReceiver);
    registerReceiver(mConnectivityReceiver, new IntentFilter(SyncStateContract.Constants.CONTENT_DIRECTORY));
    return true;
}
@Override
public boolean onStopJob(JobParameters params) {
    Log.i(TAG, "onStopJob");
    unregisterReceiver(mConnectivityReceiver);
    return true;
}
@Override
public void onNetworkConnectionChanged(boolean isConnected) {
    String message = isConnected ? "Good! Connected to Internet" : "Sorry! Not connected to internet";
    Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}

}

在我的coonectivtyReceiver类中,当wifi连接或断开连接时,我的广播接收器不会呼叫。任何帮助都将是可贵的。

公共类ConnectivityReceiver扩展了BroadcastReceiver {     私有ConnectivityReceiverListener mConnectivityReceiverListener;

ConnectivityReceiver(ConnectivityReceiverListener listener) {
    mConnectivityReceiverListener = listener;

}
@Override
public void onReceive(Context context, Intent intent) {
    Log.i("CKMM=>Connected","ConnectivityOnReceiver");
    mConnectivityReceiverListener.onNetworkConnectionChanged(isConnected(context));
}

public static boolean isConnected(Context context) {

    ConnectivityManager cm = (ConnectivityManager)
            context.getSystemService(Context.CONNECTIVITY_SERVICE);
    Log.i("CKMM=>Connected","Connected");
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI){

        Log.d("CKMM=WIFI", "Wifi Connection");
        Toast.makeText(context,"Connect WIFI",Toast.LENGTH_SHORT).show();
        Log.i("NIKM", "BroadCast receiver IF");
    }
    return netInfo != null && netInfo.isConnectedOrConnecting();

}

public interface ConnectivityReceiverListener {
    void onNetworkConnectionChanged(boolean isConnected);

}

}

0 个答案:

没有答案