我给它一个几次尝试,没有工作过。根据我的理解,这应该让广播接收器的实例运行,无论该应用是否进入后台,空闲或关闭状态。一旦打开,接收机就会继续运行(除非强制关闭?)。失败尝试接收GCM通知时,应用程序空转
我不发送delay_while_idle标志与我的GCM入下面的消息是,我如何推出这些消息的一个例子。
{
"data":
{
"alert": "message",
"badge":"0"
},
"registration_ids": ["1234567890abcdefghij"]
}
我对这个主题仍然有些困惑,但到目前为止,这是我所处的位置。 注意这个问题只是当我打开应用程序,转到另一个或只是打到家里。经过x次的时间之后,我猜系统闲置了应用程序。仍在运行,只是不积极。在此状态期间,我的应用在我需要时不会处理传入的GCM广播。
首先我声明我的广播接收器在我的应用程序类。
public class MyApplication : global::Android.App.Application
{
public static MyGCMBroadcastReceiver BroadcastReceiver = new MyGCMBroadcastReceiver();
}
下面是我的广播接收器。
[BroadcastReceiver(Permission = "com.google.android.c2dm.permission.SEND")]
[IntentFilter(new string[] { "com.google.android.c2dm.intent.RECEIVE" }, Categories = new string[] { Configuration.Current.PackageName })]
[IntentFilter(new string[] { "com.google.android.c2dm.intent.REGISTRATION" }, Categories = new string[] { Configuration.Current.PackageName })]
[IntentFilter(new string[] { "com.google.android.gcm.intent.RETRY" }, Categories = new string[] { Configuration.Current.PackageName })]
public class MyGCMBroadcastReceiver : BroadcastReceiver
{
private PowerManager.WakeLock wakeLock = null;
public override void OnReceive(Context context, Intent intent)
{
AcquireWakeLock(context);
MyIntentService.RunIntentInService(context, intent);
SetResult(Result.Ok, null, null);
}
public void AcquireWakeLock(Context context)
{
PowerManager powerManager = PowerManager.FromContext(context);
wakeLock = powerManager.NewWakeLock(WakeLockFlags.Partial, "GCM Broadcast Receiver Tag");
wakeLock.Acquire();
}
public void ReleaseWakeLock()
{
if (wakeLock != null)
wakeLock.Release();
}
}
MyApplication.BroadcastReceiver.ReleaseWakeLock();在我的intentservice类中生成通知的代码后调用。我这样做是因为我虽然很快就释放了唤醒锁。
是否能够成功发送消息...?我的意思是在发送消息之后,你已经彻底检查了从gcm收到的响应消息...? – 2015-01-15 16:39:28
是的,该部分的作品。测试它的绝对方法是通过在前台应用程序,推送消息,并立即显示10次中的9次。但是当我从这里打回家,等一会儿。通知从不显示。因此,可能收到GCM广播,但intentservice无法处理并初始化通知? – 2015-01-15 16:53:06
对于接收器,你可能会延长“WakefulBroadcastReceiver”类,而不是“广播接收器” – bjiang 2015-01-15 17:51:15