Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android作业调度器-can';不要创建持久性作业_Android_Android Permissions_Android Jobscheduler - Fatal编程技术网

Android作业调度器-can';不要创建持久性作业

Android作业调度器-can';不要创建持久性作业,android,android-permissions,android-jobscheduler,Android,Android Permissions,Android Jobscheduler,我正在试用Android棒棒糖附带的新JosScheduler API。到目前为止,我已经成功地创建并运行了一个延迟6000毫秒的作业,没有任何网络要求,没有问题 但是,我刚刚尝试通过使用setPersisted(true)函数来持久化相同的作业。一旦调用job build()函数,它现在就失败了,表示我需要在清单文件中获得\u BOOT\u COMPLETED权限 但我添加了许可: <?xml version="1.0" encoding="utf-8"?> <manifes

我正在试用Android棒棒糖附带的新JosScheduler API。到目前为止,我已经成功地创建并运行了一个延迟6000毫秒的作业,没有任何网络要求,没有问题

但是,我刚刚尝试通过使用setPersisted(true)函数来持久化相同的作业。一旦调用job build()函数,它现在就失败了,表示我需要在清单文件中获得\u BOOT\u COMPLETED权限

但我添加了许可:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  package="com.android" >

  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
但是,构建作业时,我会出现以下错误:

java.lang.IllegalArgumentException: Error: requested job be persisted without holding RECEIVE_BOOT_COMPLETED permission.
创建作业并将其添加到作业计划的代码:

ComponentName serviceComponent = new ComponentName(getApplicationContext(), MyJobService.class);
JobInfo.Builder builder = new JobInfo.Builder(1, serviceComponent)
        .setMinimumLatency(6000)
        .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
        .setPersisted(true);
JobScheduler jobScheduler = (JobScheduler) getApplicationContext().getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(builder.build());
我的JobService清单声明:

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


所以我想知道我是否犯了其他任何人都能发现的错误。我要注意的唯一一件事是,如果它确实起作用,那么代码是在IntentService中运行的,因此我想知道这是否是JobScheduler找不到权限的原因。

看起来JobScheduler保留了一个包含此权限的UID缓存:


可能您添加了权限,但手机没有重新启动,因此JobScheduler没有更新其缓存?

我也有同样的问题,但后来意识到在添加启动权限后,我没有重新安装我的应用程序。因此,该应用程序在安装时从未获得请求所需权限的机会

一旦我卸载并重新安装了应用程序,它就会正常工作


注意:我的理解是,应用程序需要在安装时获得许可。不过,我在这里需要更正。

正如43matthew所说,这可能是由JobScheduler缓存引起的

设备重新启动后,问题就解决了

PS:确保您在XML中具有以下权限

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

我注意到,如果作业计划程序设置为“持久”,则可能会出现此错误,请删除

setPersist(true);

在scheduler中,我遇到了同样的问题,我认为您的问题是您正在启动一个intent服务。您还需要将BIND_作业权限添加到您的intent服务中

    <service
        android:name=".your.intent.service"
        android:enabled="true"
        android:exported="false"
        android:permission="android.permission.BIND_JOB_SERVICE"/>


正如@rajiitapattu所指出的,您需要重新安装appReboot,为我解决了问题。无需重新安装应用程序。
    <service
        android:name=".your.intent.service"
        android:enabled="true"
        android:exported="false"
        android:permission="android.permission.BIND_JOB_SERVICE"/>