Ric*_*win 17 android android-permissions android-jobscheduler
我正在尝试Android Lollipop附带的新JoScheduler API.到目前为止,我已经设法成功地创建并运行了6000毫秒的延迟,没有网络要求而没有问题.
但是,我刚刚尝试通过使用setPersisted(true)函数来保持相同的工作.一旦调用了job 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" />
Run Code Online (Sandbox Code Playgroud)
我甚至在添加作业之前添加了以下代码,以查看应用是否已注册权限:
PackageManager pm = context.getPackageManager();
int hasPerm = pm.checkPermission(Permission.RECEIVE_BOOT_COMPLETED,
context.getPackageName());
if (hasPerm == PackageManager.PERMISSION_GRANTED)
{
// Goes into here every time
}
Run Code Online (Sandbox Code Playgroud)
但是,当作业生成时,我收到以下错误:
java.lang.IllegalArgumentException: Error: requested job be persisted without holding RECEIVE_BOOT_COMPLETED permission.
Run Code Online (Sandbox Code Playgroud)
我的代码创建并将作业添加到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());
Run Code Online (Sandbox Code Playgroud)
我的JobService清单声明:
<service
android:name=".service.MyJobService"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true" >
</service>
Run Code Online (Sandbox Code Playgroud)
所以我想知道我是否在做其他任何人都无法发现的错误.我唯一注意到它确实会产生影响的是,代码是在IntentService中运行的,所以我想知道这是否是JobScheduler无法找到权限的原因.
小智 27
我有同样的问题,但后来意识到我在添加启动权限后没有重新安装我的应用程序.因此,应用程序永远不会有机会在安装时请求所需的权限.
卸载并重新安装应用程序后,它就可以运行了.
注意:我的理解是应用程序需要在安装时获得他们的许可.但是我要在这里纠正.
Cod*_*ody 15
正如43matthew所说,这可能是由JobScheduler缓存造成的.
它在设备重启后解决了.
PS:确保您的XML具有以下权限.
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Run Code Online (Sandbox Code Playgroud)
看起来 JobScheduler 保留了持有此权限的 uid 缓存:http ://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.0_r1/com/android /server/job/JobSchedulerService.java#736
也许你添加了权限,但手机没有重启,因此 JobScheduler 没有更新它的缓存?
| 归档时间: |
|
| 查看次数: |
11665 次 |
| 最近记录: |