Android JobScheduler - kann nicht erstellen Sie eine permanente Auftrag

Bin ich beim ausprobieren der neuen JoScheduler API, die kommen mit Android Lollipop. Ich habe es bisher geschafft, erfolgreich zu erstellen und haben einen job ausführen, mit einer Verzögerung von 6000 Millisekunden keine Netzwerk-Anforderungen, ohne ein Problem.

Allerdings habe ich gerade versucht, beibehalten der gleichen Stelle über die Verwendung der setPersisted(true) - Funktion. Sobald der job build () - Funktion wird aufgerufen, es sich nicht zu sagen brauche ich die RECEIVED_BOOT_COMPLETED Berechtigung in der Manifest-Datei.

Aber ich habe die Erlaubnis:

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

Habe ich auch Hinzugefügt, den folgenden code, bevor der job ist Hinzugefügt, um zu sehen, ob die app die Berechtigung registriert:

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

Jedoch, wenn der job gebaut ist, bekomme ich die folgende Fehlermeldung:

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

Meinen code zu erstellen, und fügen Sie den Auftrag der 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 manifest-Erklärung:

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

So Frage ich mich, wenn ich mache etwas anderes falsch, dass jemand erkennen kann. Das einzige, was ich beachten incase macht es einen Unterschied, ist, dass der code ausgeführt wird in einem IntentService, so Frage ich mich, ob das vielleicht ein Grund sein, warum der JobScheduler nicht finden können, der Erlaubnis.

Schreibe einen Kommentar