我正在嘗試Android Lollipop附帶的新JoScheduler API。到目前爲止,我已經成功地創建了一個延遲6000毫秒的作業,並且沒有網絡要求而沒有問題。Android JobScheduler - 無法創建持久作業
但是,我剛剛嘗試通過使用setPersisted(true)函數來堅持相同的工作。只要調用作業build()函數,它現在會失敗,說我需要Manifest文件中的RECEIVED_BOOT_COMPLETED權限。
但我已經添加了權限:
<?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" />
我甚至已經添加以下代碼作業被添加,查看是否應用程序有註冊許可之前:
PackageManager pm = context.getPackageManager();
int hasPerm = pm.checkPermission(Permission.RECEIVE_BOOT_COMPLETED,
context.getPackageName());
if (hasPerm == PackageManager.PERMISSION_GRANTED)
{
// Goes into here every time
}
然而,當工作是建立我得到以下錯誤:
java.lang.IllegalArgumentException: Error: requested job be persisted without holding RECEIVE_BOOT_COMPLETED permission.
我的代碼來創建和添加t他工作到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());
我JobService艙單申報:
<service
android:name=".service.MyJobService"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true" >
</service>
所以我想知道如果我在做別的事情不對任何人都可以發現。唯一值得注意的是它確實有所作爲,代碼運行在IntentService中,所以我想知道這是否是JobScheduler無法找到權限的原因。
正如@RajiithAttapattu您需要重新安裝應用程序 –
重啓注意解決這個問題對我來說。無需重新安裝應用程序。 – Stanislav