在 Android 内将数据上传到 Internet 上的服务器

Upload data to server on Internet in Android

我正在尝试在有互联网且应用程序未在前端 运行ning 时在后台将数据上传到服务器。

所以我在某处读到这可以通过 JobService 实现。

我创建了一个简单的作业服务,它在 onStartJob 和启动画面中提示 activity。我调用了以下代码:

mJobScheduler = (JobScheduler)
                getSystemService(Context.JOB_SCHEDULER_SERVICE);
        JobInfo.Builder builder = new JobInfo.Builder(1,
                new ComponentName(getPackageName(),
                        Unigen_Upload_JobScheduler.class.getName()));
        builder.setPeriodic(60000);
        builder.setPersisted(true);
        builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);

        if (mJobScheduler.schedule(builder.build()) <= 0) {
            Log.e("Value", "onCreate: Some error while scheduling the job");
        }

第一次 运行 正确,但 1 分钟后 运行 又不正确。我不确定为什么没有发生这种情况?

另外,我还有一个问题,只要打开/更改 WIFI 或手机,就会触发吗?

我是否必须使用广播接收器来执行上述操作?

谢谢!

更新:

public class Unigen_Upload_JobScheduler extends JobService {

    public Unigen_Upload_JobScheduler() {
    }

    @Override
    public boolean onStartJob(JobParameters params) {

        Toast.makeText(this,"Executed",Toast.LENGTH_LONG).show();

        Log.e("Value","+_ what should I do");
        /*
         * True - if your service needs to process
         * the work (on a separate thread).
         * False - if there's no more work to be done for this job.
         */
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {

        return false;
    }

}

JobScheduler 定期作业的最小间隔为 15 分钟。检查这背后的原因:

Why can't an interval be smaller than 15 minutes for periodic jobs?

JobScheduler's minimum periodic interval is 15 minutes or (15 * 60 * 1000) 900000ms. You can look into WorkManager which is a part of android jetpack 更方便使用。至于你的第二个问题,workmanager有各种场景任务调度的便捷方法。