Android JobScheduler - kann keinen dauerhaften Job erstellen

Ich probiere die neue JoScheduler-API aus, die mit Android Lollipop geliefert wurde. Bisher ist es mir gelungen, einen Job mit einer Verzögerung von 6000 Millisekunden ohne Netzwerkanforderungen problemlos zu erstellen und auszuführen.

Ich habe jedoch gerade versucht, denselben Job mit der Funktion setPersisted (true) beizubehalten. Sobald die job build () - Funktion aufgerufen wird, wird nicht mehr angegeben, dass ich die RECEIVED_BOOT_COMPLETED-Berechtigung in der Manifest-Datei benötige.

Aber ich habe die Erlaubnis hinzugefügt:

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

Ich habe sogar den folgenden Code hinzugefügt, bevor der Job hinzugefügt wird, um festzustellen, ob für die App die Berechtigung registriert wurde:

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

Ich erhalte jedoch beim Erstellen des Jobs die folgende Fehlermeldung:

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

Mein Code zum Erstellen und Hinzufügen des Jobs zum 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());

Meine JobService-Manifestdeklaration:

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

So frage ich mich, ob ich etwas anderes falsch mache, das jeder erkennen kann. Das Einzige, was ich bemerken werde, wenn es einen Unterschied macht, ist, dass der Code in einem IntentService ausgeführt wird. Daher frage ich mich, ob dies möglicherweise ein Grund ist, warum der JobScheduler die Berechtigung nicht finden kann.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage