标签: android-jobscheduler

如何从JobService返回结果?

我正在玩Android,并编写一个带有活动和服务的小应用程序.活动在按钮单击时启动服务,它应该从URI获取一些数据并将其作为结果返回.有时,数据不可用或不符合标准,然后即使活动在后台,服务也应该每隔X分钟重试一次.

我通过IntentResultReceiver(在包中传递)实现了活动和服务之间的通信.在实现服务时,我想使用新JobScheduler组件,但后来看到它只能接受一个PersistableBundle不能添加Parcelable对象(ResultReceiver)而只能添加基本类型的组件.

我希望服务能够安排在网络可用时运行的作业以及每隔X分钟检查一次的数据.一旦获得它,我希望将数据返回给服务,以便它可以决定它是否可接受或者我们需要再次重试.如果服务接受数据,它将通过该服务将其返回给活动ResultsReceiver.

我不能使用ResultsReceiver,JobService因为我不构造JobService实例(由完成JobInfo.Builder),我不能传递它对回调对象的引用.

如何在预定作业和调用它的服务之间进行通信?

对不起,如果它是微不足道的,我不熟悉Android ..

谢谢!

android android-jobscheduler

5
推荐指数
1
解决办法
2343
查看次数

JobScheduler.schedule(作业)未启动JobService

我正在使用一个用于JobScheduler 的lib来处理棒棒糖前设备.我正在使用一个棒棒糖设备.问题是mJobScheduler.schedule(作业)应该启动我的工作服务,但它没有启动.此外,当我包含.setPeriodic(2000)方法时,应用程序崩溃了

堆栈跟踪.

08-06 00:37:06.729 19693-19693/? E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: rishabh.example.com.myapplication, PID: 19693
                                               java.lang.RuntimeException: Unable to start activity ComponentInfo{rishabh.example.com.myapplication/rishabh.example.com.myapplication.MainActivity}: java.lang.IllegalArgumentException: Can't call setOverrideDeadline() on a periodic job.
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
                                                   at android.app.ActivityThread.access$800(ActivityThread.java:155)
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
                                                   at android.os.Handler.dispatchMessage(Handler.java:102)
                                                   at android.os.Looper.loop(Looper.java:135)
                                                   at android.app.ActivityThread.main(ActivityThread.java:5343)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at java.lang.reflect.Method.invoke(Method.java:372)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
                                                Caused by: java.lang.IllegalArgumentException: Can't call setOverrideDeadline() on a periodic job.
                                                   at me.tatarka.support.job.JobInfo$Builder.build(JobInfo.java:477)
                                                   at rishabh.example.com.myapplication.MainActivity.constructJob(MainActivity.java:30)
                                                   at rishabh.example.com.myapplication.MainActivity.onCreate(MainActivity.java:19)
                                                   at android.app.Activity.performCreate(Activity.java:6010)
                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) 
                                                   at android.app.ActivityThread.access$800(ActivityThread.java:155) 
                                                   at …
Run Code Online (Sandbox Code Playgroud)

android android-jobscheduler

5
推荐指数
1
解决办法
6118
查看次数

使用JobScheduler检测连接更改

由于CONNECTIVITY_CHANGEAndroid N中已弃用意图过滤器,如何通过JobScheduler检测连接性变化?

谁能帮我?

android android-jobscheduler android-7.0-nougat

5
推荐指数
0
解决办法
3542
查看次数

如何在Firebase Job调度程序中检测网络断开连接?

在Firebase Job调度程序中,可以检测到何时连接到网络,但是如何检测何时断开与网络的连接?

    Job myJob = dispatcher.newJobBuilder()
    .setService(MyJobService.class) 
    .setTag("my-unique-tag")
    .setConstraints(
    // only run on an unmetered network
    Constraint.ON_UNMETERED_NETWORK,
    // only run when the device is charging
    Constraint.DEVICE_CHARGING
     )
    .build();

dispatcher.mustSchedule(myJob);
Run Code Online (Sandbox Code Playgroud)

这将检测到何时连接到Unmetrered网络,无论何时从所有网络断开连接,我都想启动服务

android android-jobscheduler firebase-job-dispatcher

5
推荐指数
1
解决办法
430
查看次数

JobScheduler不重复工作

我正在使用JobScheduler.setPeriodic()来重复我的JobIntentService.它第一次工作,但从不重复.在Android 7.0上运行

ConcurrentCheck.java

int mdelaymilles  = 30000;
JobScheduler jobScheduler = (JobScheduler) mActivity.getSystemService(JOB_SCHEDULER_SERVICE);
        ComponentName componentName = new ComponentName(mActivity, ConcurrentCheckService.class);
        JobInfo jobInfo = new JobInfo.Builder(JOB_ID, componentName)
                .setPeriodic(mdelaymilles)
                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                .build();
        int resultCode = jobScheduler.schedule(jobInfo);
        if (resultCode == JobScheduler.RESULT_SUCCESS) {
            Log.d(LOG_TAG, "Job scheduled!");
            Intent intent = new Intent();
            intent.putExtra(LAST_POSITION, lastPosition);
            JobIntentService.enqueueWork(mActivity, ConcurrentCheckService.class, JOB_ID, intent);
        } else {
            Log.d(LOG_TAG, "Job not scheduled");
        }
Run Code Online (Sandbox Code Playgroud)

android android-jobscheduler

5
推荐指数
1
解决办法
4317
查看次数

在作业计划程序中使用BroadcastReceiver来检测节能器

如何在jobScheduler中使用BroadcastReceiver?由于广播接收器的节电滤波器已发送到注册的接收器,因此在清单中声明接收器不起作用。此后,它应该在班级内部注册。我在jobScheduler中尝试过(请查看下面的代码),但是它不起作用。

public class MainActivity extends AppCompatActivity 
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (jobScheduler == null) {
            jobScheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);

            ComponentName jobService =
                    new ComponentName(getPackageName(), MyJobService.class.getName());

            JobInfo jobInfo
                    = new JobInfo.Builder(MYJOBID, jobService).setPeriodic(15 * 60 * 1000L)
                    .setExtras(bundle)
                    .setPersisted(true)
                    .setRequiresDeviceIdle(false)
                    .build();

            int jobId = jobScheduler.schedule(jobInfo);

            if (jobScheduler.schedule(jobInfo) > 0) {
            } else {
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MyJobService.java

public class MyJobService extends JobService {

    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        jobP = jobParameters;

    if (mLocationRequest == null) {
        mLocationRequest …
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver android-jobscheduler

5
推荐指数
0
解决办法
605
查看次数

用于JobScheduler的Android-setPeriodic无法正常工作

我已经编写了一个使用本地SqliteDatabase创建和提醒任务的应用程序。我编写了一个jobScheduler服务,以检查设备时间和日期以及数据库中的任务,如果匹配则显示推送通知。我还想要的是在后台运行的服务,每5秒检查一次数据。但是当我写

builder.setPeriodic(5000); builder.setPersisted(true);

服务停止检查数据。

这是我的代码

主要活动

      public class MainActivity extends AppCompatActivity  {
ImageButton plusImageBtn;
DatabaseHelper databaseHelper;
BottomNavigationView navigation;
Toolbar toolbar;
private ComponentName mServiceComponent;
private int jobId=0;
private static final String TAG = MainActivity.class.getSimpleName();
public static final String WORK_DURATION_KEY =
        BuildConfig.APPLICATION_ID + ".WORK_DURATION_KEY";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    navigation = (BottomNavigationView) findViewById(R.id.navigation);
    plusImageBtn = (ImageButton) findViewById(R.id.plusImagBtn);
    toolbar= (Toolbar) findViewById(R.id.toolbar_main);
    setSupportActionBar(toolbar);

    mServiceComponent = new ComponentName(this, JobSchedulerService.class);

    databaseHelper= new DatabaseHelper(this);
    navigation.setOnNavigationItemSelectedListener
            (new BottomNavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) …
Run Code Online (Sandbox Code Playgroud)

service android android-sqlite android-jobscheduler

5
推荐指数
1
解决办法
4151
查看次数

如何在 WorkManger 系统范围内注册一次定期工作请求(即启动或安装后)

我的 Android 应用程序中需要一个组件,最好将其描述为看门狗,即每 30 分钟 +/- 5 分钟执行一次并断言仍满足某个条件的函数。还必须在设备重新启动后执行看门狗,而用户此后没有明确打开应用程序。应用程序的安装也必须如此。即使在安装后未明确打开应用程序,也必须安排看门狗定期执行。

我知道使用WorkManager是最好的或“现代”的方式。无需WorkManager我为不同的 API 级别编写单独的代码,即BroadcastReceiver用于 API 级别 <27 和JobScheduler更高 API 级别的设备。WorkManager应该抽象出这些差异。

但我不明白在哪里打电话WorkManager.getInstance().enqueue( myWatchdogRequest );。使用任何主要活动的回调(即onCreate和类似的)都不是正确的地方,因为我不能依赖正在创建的活动。

我希望除了以编程方式排队作业之外,还应该有一种方法如何在清单中声明这些作业,从而将它们通知给系统(类似于老式的BroadcastReceiver)。实际上,JobScheduler如果我决定使用这种方法,我也会遇到同样的问题。

我在哪里排队WorkRequest“全局”?

android watchdog job-scheduling android-jobscheduler android-workmanager

5
推荐指数
1
解决办法
2767
查看次数

IntentService + startForeground与JobIntentService

由于Android Oreo后台执行限制,因此文档建议将IntentServices 重构为JobIntentService

https://developer.android.com/about/versions/oreo/background

JobIntentService立即以IntentService低于Oreo的价格运行,但在Oreo +上安排作业

https://developer.android.com/reference/android/support/v4/app/JobIntentService

在什么情况下,将法线IntentService作为Service具有持久性通知的前台会有意义,什么时候JobIntentService更好?

我可以看到的一个缺点JobIntentService是它不会立即开始。

android android-service intentservice android-intentservice android-jobscheduler

5
推荐指数
1
解决办法
3129
查看次数

澄清OneOffTask上的setUpdateCurrent

我试图围绕GcmNetworkManager工具中的setTag和OneoffTask的setUpdateCurrent的行为.
setUpdateCurrent的文档说明了这一点:

可选的setter,用于指定此任务是否应覆盖具有相同标记的任何预先存在的任务.默认为false,这意味着新任务不会覆盖现有任务.

很公平,但它并没有说明任务会发生什么,它只说一件事不会发生 - 即任务不会被覆盖.:)我不清楚是否使用setUpdateCurrent意味着允许重复任务意味着它们被丢弃?

为了清楚起见,我的问题是:假设您使用了setUpdateCurrent(false),当您创建一个OneoffTask,其标签与已经安排的另一个OneoffTask相同时,除了已经安排的任务之外,新任务是否仍会发生,或者新任务是否会被抛弃,被视为重复?

android android-service google-cloud-messaging android-jobscheduler

4
推荐指数
1
解决办法
697
查看次数