0

我给它一个几次尝试,没有工作过。根据我的理解,这应该让广播接收器的实例运行,无论该应用是否进入后台,空闲或关闭状态。一旦打开,接收机就会继续运行(除非强制关闭?)。失败尝试接收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类中生成通知的代码后调用。我这样做是因为我虽然很快就释放了唤醒锁。

+0

是否能够成功发送消息...?我的意思是在发送消息之后,你已经彻底检查了从gcm收到的响应消息...? – 2015-01-15 16:39:28

+0

是的,该部分的作品。测试它的绝对方法是通过在前台应用程序,推送消息,并立即显示10次中的9次。但是当我从这里打回家,等一会儿。通知从不显示。因此,可能收到GCM广播,但intentservice无法处理并初始化通知? – 2015-01-15 16:53:06

+1

对于接收器,你可能会延长“WakefulBroadcastReceiver”类,而不是“广播接收器” – bjiang 2015-01-15 17:51:15

回答

1

对于接收器,你可以扩展,而不是BroadcastReceiverWakefulBroadcastReceiver类。

帮助器实现BroadcastReceiver的常见模式,它接收设备唤醒事件,然后将工作关闭至Service,同时确保设备在转换期间不会恢复休眠。

有关详细信息,你可以参考here

相关问题