Ich probiere die neue JoScheduler API aus, die mit Android Lollipop geliefert wurde. Ich habe es bisher geschafft, erfolgreich einen Job zu erstellen und auszuführen, mit einer Verzögerung von 6000 Millisekunden ohne Netzwerkanforderungen ohne ein Problem.Android JobScheduler - kann keinen dauerhaften Job erstellen
Allerdings habe ich gerade versucht, den gleichen Job über die setPersisted (True) -Funktion zu bestehen. Sobald die Job build() - Funktion aufgerufen wird, schlägt es fehl, 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 hinzugefügt, um den folgenden Code vor der Arbeit zu sehen, wird hinzugefügt, wenn die App die Berechtigung hat, 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
}
Wenn jedoch der Job ist gebaut Ich erhalte folgende Fehlermeldung:
java.lang.IllegalArgumentException: Error: requested job be persisted without holding RECEIVE_BOOT_COMPLETED permission.
Mein Code zum Erstellen und Hinzufügen von t er Auftrag an den 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());
Mein Jobservice Manifest Erklärung:
<service
android:name=".service.MyJobService"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true" >
</service>
Also ich frage mich, wenn ich etwas anderes falsch tue, dass jemand erkennen. Das einzige, was ich bemerken werde, wenn es einen Unterschied macht, ist, dass der Code in einem IntentService ausgeführt wird, also frage ich mich, ob dies ein Grund sein könnte, warum der JobScheduler die Erlaubnis nicht finden kann.
Wie von @RajiithAttapattu Sie die App –
Reboot neu installieren müssen, das Problem für mich gelöst. Keine Notwendigkeit, die App neu zu installieren. – Stanislav