如何在Xamarin中实现持续工作的通知服务

时间:2016-11-30 16:27:30

标签: android xamarin service push-notification xamarin.android

是否有人知道实现通知服务的方法,这将满足以下条件:

  • 它可以持续工作,甚至在应用程序关闭时也会收到通知。它会在设备重启后自动启动,依此类推。
  • 通知具有操作,在用户单击它们之后,从服务(fe:web请求)执行某些方法,而无需打开我的应用程序或以任何方式打扰用户。

所以它是非常常见的功能,许多应用程序运行这样的服务(Facebook,Gmail,Tinder ......),但我找不到在Xamarin中实现这一点的方法。

目前我正在开发Android项目,我的问题是:

  1. 如何使通知操作导致服务方法而不是活动?
  2. 如何让后台服务不断运作?
  3. 我试过了:

    • IntentService和Service,但在应用程序关闭后会被销毁。
    • 上面的
    • ,从StartForeground()开始,但它需要不断通知服务,这是不需要的。
    • Firebase消息传递,它会在应用程序关闭后收到通知,但这是简化的方式,我无法对操作或通知的任何其他方面进行编程。

    所有帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

解决这个问题的一个好方法是将AlarmManager与服务结合起来: AlarmManager将确保您的任务将定期执行,即使您的应用程序已关闭(并且通过添加正确的接收器,即使重启后)

然后它可以调用具有意图的服务,服务可以在后台完成工作

这样,您可以定期在后台执行任务

只需查看AlarmManager documentation

即可

注册警报可以通过这种方式完成(这是Java语法,但在Xamarin中存在相同的一个):

private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
...
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
    SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR,
    AlarmManager.INTERVAL_HALF_HOUR, alarmIntent);

然后在你的AlarmReceiver中(不要忘记在清单中声明它)你可以启动,例如,一个IntentService:

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
            //call your service here
        }
    }
}

注意:如果你希望你的任务在后台执行,你可能需要使用wake_lock但是需要另一个线程来解释