4

我正在使用作业调度程序,因为不再可以在清单中声明网​​络连接意图。我尝试使用.setPeriodic(10 * 1000)使作业定期进行,但这样做,即使没有可用的网络,作业也会在 10 秒后运行,就好像它忽略了这条线一样.setRequiredNetworkType(NETWORK_TYPE_ANY)

如果我删除.setPeriodic(10 * 1000),那么作业只运行一次。我想要实现的目标与在后台优化和基于连接更改禁用应用程序唤醒之前可能实现的目标相同:如果有可用的网络,则运行作业服务,如果没有则什么也不做。

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main5);

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            JobScheduler mJobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
            JobInfo.Builder builder = null;
            builder = new JobInfo.Builder(1, new ComponentName(getPackageName(),
                    MyJobService.class.getName()))
                    .setRequiredNetworkType(NETWORK_TYPE_ANY)
                    .setPeriodic(10 * 1000);


        if (mJobScheduler.schedule(builder.build()) <= 0) {
            Log.e("gch", "can't Schedule job for MyJobService");

        } else {
            Log.d("gch", "Schedule job for MyJobService");

        }
        }
}

这是jobService

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class MyJobService extends android.app.job.JobService {
    public MyJobService() {
    }

    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        Log.e("gch", "onStartJob");
        Toast.makeText(this, "onStartJob", Toast.LENGTH_SHORT).show();
        Intent inent = new Intent(this, AnotherActivity.class);


        inent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        startActivity(inent);
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters jobParameters) {
        Log.e("gch", "onStartonStopJob");
        Toast.makeText(this, "onStartonStopJob", Toast.LENGTH_SHORT).show();

        return true;
    }

}

我已将此添加到清单中

 <service
        android:name=".MyJobService"
        android:permission="android.permission.BIND_JOB_SERVICE" />
4

0 回答 0