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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche Problem, aber dann realisiert, dass ich noch nicht neu installiert meine app nach dem hinzufügen der boot-Erlaubnis. So ist die app noch nie die Gelegenheit hatte, auf Antrag die erforderliche Berechtigung, wenn es installiert wurde.
Einmal habe ich deinstalliert und re-installiert die app, es funktioniert.
Hinweis: Mein Verständnis ist, dass die Apps benötigen, um Ihre Berechtigung bei der Installation aus. Jedoch, ich Standplatz korrigiert werden, hier.
Nur als 43matthew sagte, Es ' s wahrscheinlich verursacht durch JobScheduler-cache.
Es ist gelöst nach Gerät neu zu starten.
PS: Stellen Sie sicher, dass Sie die folgende Erlaubnis in deine XML.
Sieht es aus wie der JobScheduler hält einen cache von uids halten, dass diese Berechtigung:
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.0_r1/com/android/server/job/JobSchedulerService.java#736
Vielleicht haben Sie die Erlaubnis, aber das Telefon nicht neu starten, und daher der JobScheduler nicht aktualisiert seinen cache?
Ich hatte das gleiche problem, ich denke, dein Problem ist, dass Sie beginnen, Absicht service. Müssen Sie den BIND_JOB die Erlaubnis, Ihren Vorsatz service.
Bemerkte ich, dass, wenn job scheduler anhalten, dann können Sie fallen in diese Fehler, entfernen
vom scheduler