我在我的应用程序中使用GcmNetworkManager进行定期和任务任务执行之一.我收到这两个错误,无法弄清楚原因.实施是正确的,因为我无法在登台时重现这些问题.
Fatal Exception: java.lang.RuntimeException: Package manager has died
at android.app.ApplicationPackageManager.queryIntentServicesAsUser(ApplicationPackageManager.java:700)
at android.app.ApplicationPackageManager.queryIntentServices(ApplicationPackageManager.java:706)
at com.google.android.gms.gcm.GcmNetworkManager.zzdi(Unknown Source)
at com.google.android.gms.gcm.GcmNetworkManager.schedule(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
&
Caused by java.lang.IllegalArgumentException: There is no GcmTaskService component registered within this package. Have you extended GcmTaskService correctly?
at com.google.android.gms.common.internal.zzx.zzb(Unknown Source)
at com.google.android.gms.gcm.GcmNetworkManager.zzdi(Unknown Source)
at com.google.android.gms.gcm.GcmNetworkManager.schedule(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
谢谢
PS:设备具有8.1+的播放服务.
android scheduling job-scheduling periodic-task gcm-network-manager
如果应用程序在前台,后台运行或被杀死,该应用程序会显示预期的行为.但是,一旦重新启动,PeriodicTask停止运行
以下是相关的代码:
在AndroidManifest:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<service android:name=".tracking.MyTaskService"
android:exported="true"
android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE">
<intent-filter>
<action android:name="com.google.android.gms.gcm.ACTION_TASK_READY" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
PeriodicTask配置:
PeriodicTask task = new PeriodicTask.Builder()
.setService(MyTaskService.class)
.setTag(TASK_TAG_PERIODIC)
.setPeriod(30L)
.setFlex(10L)
.setExtras(bundle)
.setPersisted(true)
.build();
mGcmNetworkManager.schedule(task);
Run Code Online (Sandbox Code Playgroud)
在Logcat中,我得到以下内容:
E/NetworkScheduler.TED: Couldn't start service: Intent
{ act=com.google.android.gms.gcm.ACTION_TASK_READY
cmp=xxx.xxxxxx.xxx/.tracking.MyTaskService (has extras)
}
Run Code Online (Sandbox Code Playgroud)
附加所有相关细节:
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.example.gcmnetworkmanagerquickstart">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- [START manifest_service] -->
<service
android:name=".MyTaskService"
android:exported="true"
android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE"> …Run Code Online (Sandbox Code Playgroud) android google-cloud-messaging periodic-task gcm-network-manager
在Google I/O 2016上宣布Firebase之后,我已经阅读了有关我的代码,GCM到FCM,Google Analytics相关更改等的一些更改的迁移...但我没有找到任何有关GcmNetworkManager的信息,会发生什么它?
我们有一个新的任务计划程序?
还是旧的吗?
提前致谢.
android firebase gcm-network-manager firebase-cloud-messaging
我正在尝试使用GCM网络管理器将日志发送到后端服务.我们每隔一小时运行一次警报,创建一个OneoffTask,在执行时,将使用日志消息调用后端服务.
这很有效,但是大量的任务都丢失了(超过一半).起初,我认为它与我们的后端或网络有关,但是在添加了大量的文件记录之后,事实证明服务中的onRunTask从未被触发用于这些任务(但它们肯定会被安排.为什么这些丢失了吗?我误解了API,还是OneoffTasks根本不可靠?
这就是OneoffTask的安排方式:
GcmNetworkManager.getInstance(context).schedule(new OneoffTask.Builder()
.setService(AvroLogService.class)
.setExtras(bundle)
// A mandatory tag which identifies the task
// We add a unique hash to the tag to make sure that
// tasks are logged and not thrown away as dupes.
// See: http://stackoverflow.com/q/34528960/304262
.setTag(java.util.UUID.randomUUID().toString())
// Persist to disk, even across boots:
.setPersisted(true)
// Sets a time frame for the execution of this task in seconds.
// This specifically means that the task can either be
// executed right now, or at latest …Run Code Online (Sandbox Code Playgroud) android android-service google-cloud-messaging gcm-network-manager gcmtaskservice
GcmNetworkManager当用户恢复互联网连接时,我开始实现触发同步
在查看OneoffTask的文档时,它说setExecutionWindow是必需的
用于创建一次性任务的强制设置器
不过,我只希望当用户有上网本执行这听起来像用户有互联网,但在窗口之前,可以执行windowStartDelaySeconds和windowEndDelaySeconds.
那么这是否意味着网络管理员可以在某个时间之前执行任务,windowEndDelaySeconds或者这意味着一旦互联网恢复它将在那个时间执行?
我已经安排了一个定期运行的任务GcmNetworkManager,但我不希望它被持久化,因为我不想添加android.Manifest.permission.RECEIVE_BOOT_COMPLETED我的应用程序所需的权限列表.所以,我目前正在安排onCreate()我的主要活动中的任务.我想知道,有没有办法查询GcmNetworkManager我的任务,如果已经安排,请跳过这个?
需要调度程序
Run task immediately after net is availableReschedule task if it fails because of some problems.should handle cases of broadcast receiver to know if connection availableNo delay in execution if the internet is already available not like GCMNetworkManager's OneOfTask which take at least 30 seconds to execute the scheduled task我尝试了GCM网络管理器的OneOfTask处理它,但即使互联网可用,也需要至少30秒才能执行.
是否有任何其他调度程序将所有上述任务合二为一.