Próbuję nowego interfejsu API JoScheduler, który jest dostarczany z Androidem Lollipop. Do tej pory udało mi się pomyślnie utworzyć i uruchomić zadanie z opóźnieniem 6000 milisekund bez wymagań sieciowych bez problemu.Android JobScheduler - nie można utworzyć trwałej pracy
Jednak próbowałem utrzymać tę samą pracę za pomocą funkcji setPersisted (true). Zaraz po wywołaniu funkcji budowania zadań (job build) nie powiedzie się, że potrzebuję uprawnienia RECEIVED_BOOT_COMPLETED w pliku manifestu.
Ale dodałem gość:
<?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" />
Mam nawet dodawali następujący kod zanim zadanie zostanie dodane do sprawdzenia, czy aplikacja ma uprawnienia Zarejestrowano
PackageManager pm = context.getPackageManager();
int hasPerm = pm.checkPermission(Permission.RECEIVE_BOOT_COMPLETED,
context.getPackageName());
if (hasPerm == PackageManager.PERMISSION_GRANTED)
{
// Goes into here every time
}
Jednak, gdy Zadanie jest zbudowane Otrzymuję następujący błąd:
java.lang.IllegalArgumentException: Error: requested job be persisted without holding RECEIVE_BOOT_COMPLETED permission.
Mój kod do tworzenia i dodawania t że praca z 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());
Moja JobService manifest deklaracja:
<service
android:name=".service.MyJobService"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true" >
</service>
Więc zastanawiam się czy ja robię coś innego złego, że ktoś może zauważyć. Jedyną rzeczą, na którą zwrócę uwagę, jest to, że robi się różnicę, że kod jest uruchamiany w IntentService, więc zastanawiam się, czy to może być powód, dla którego JobScheduler nie może znaleźć pozwolenia.
Jak zauważył @RajiithAttapattu trzeba ponownie zainstalować aplikację –
Reboot rozwiązać ten problem dla mnie. Nie musisz ponownie instalować aplikacji. – Stanislav