Android JobScheduler: no se puede crear un trabajo persistente

Estoy probando la nueva API de JoScheduler que viene con Android Lollipop. Hasta ahora he logrado crear y ejecutar un trabajo con un retraso de 6000 milisegundos sin requisitos de red sin un problema.

Sin embargo, acabo de intentar persistir en el mismo trabajo mediante el uso de la función setPersisted (true). Tan pronto como se llama a la función build () del trabajo, ahora falla y dice que necesito el permiso RECEIVED_BOOT_COMPLETED en el archivo Manifiesto.

Pero he agregado el permiso:

<?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" />

Incluso he agregado el siguiente código antes de agregar el trabajo para ver si la aplicación tiene el permiso registrado:

PackageManager pm = context.getPackageManager();
int hasPerm = pm.checkPermission(Permission.RECEIVE_BOOT_COMPLETED, 
context.getPackageName());
if (hasPerm == PackageManager.PERMISSION_GRANTED)
{
   // Goes into here every time
}

Sin embargo, cuando se crea el trabajo, aparece el siguiente error:

java.lang.IllegalArgumentException: Error: requested job be persisted without holding RECEIVE_BOOT_COMPLETED permission.

Mi código para crear y agregar el trabajo a JobSchedular:

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());

Mi declaración de manifiesto de JobService:

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

Así que me pregunto si estoy haciendo algo mal que alguien pueda detectar. Lo único que notaré en caso de que marque la diferencia es que el código se ejecuta en un IntentService, por lo que me pregunto si esto podría ser una razón por la que JobScheduler no puede encontrar el permiso.

Respuestas a la pregunta(5)

Su respuesta a la pregunta