创建一个检查更新常量的服务

时间:2016-12-12 12:10:20

标签: c# android xamarin service broadcast

我是这个社区的新手,但我经常在这个地方查询我的问题已经很久了,从未失望过!但这次我很难找到完美的方法/答案/解决我的问题,所以我第一次不得不自己提问。

我正在创建一个像Quizduell这样的游戏,它运行顺畅,我和一些朋友一起玩了很多轮。唯一不起作用的是“检查更新并通知我,如果有一些,从启动到关闭”应用程序的一部分。

我的服务器一直在Internet上运行。客户端,Android服务器应该在服务器上请求是否有新闻,应用程序将SessionID和播放器的ID发送到服务器并仅返回一个名称(以保持Dataconsumption较小)。服务通过SharedPreferences获取ID和SessionID,因为我与Intents有一些争执。服务现在显示通知,这部分工作正常。没有与应用程序的连接,它自己完全运行(除了SharedPreferences)

问题是,我只是不知道如何开始:

我有一个广播,它应该在启动时启动(但如果确实如此我不是shure,我用Airplanemodechange进行了测试并且它被解雇了,但是只有当应用程序运行时,这不是我想要的)它开始了偶尔触发服务的AlarmManager:

    [BroadcastReceiver(Enabled = true, Process = ":remote", Name = "Broadcasts.UpdateBroadcast")]
[IntentFilter(new[] {  Intent.ActionBootCompleted, Intent.ActionAirplaneModeChanged})]
public class UpdateBroadcast : BroadcastReceiver
{

public static readonly String TAG = "com.JonQse.Schlauweia.UpdateBroadcast";

    public override void OnReceive(Context context, Intent intent)
{

        var updateService = new Intent(context, typeof(UpdateService));
        //context.StartService(updateService);
        PendingIntent _mAlarmSender = PendingIntent.GetService(context, 0, updateService, 0);
        var am = (AlarmManager)context.GetSystemService(Context.AlarmService);
        long interval = 1000 * (int)(60 * 0.2);
        am.SetRepeating(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime() + interval, interval, _mAlarmSender);

    }
}

所以这根本不起作用。我不知道为什么。接下来的事情是,当我启动应用程序时,我无法解雇广播,所以它至少会运行:

            bool alarmUp = (PendingIntent.GetBroadcast(this, 0,
    new Intent(this, typeof(UpdateService)),
    PendingIntentFlags.NoCreate) != null);

        if(!alarmUp)
        {
            var intent = new Intent("Broadcasts.UpdateBroadcast");
            SendBroadcast(intent);
        }

我希望你能帮助我。如果我对这个问题感到疯狂,我不会写在这里。

谢谢你们!

1 个答案:

答案 0 :(得分:0)

这适用于我的应用。 允许在清单中启动完成接收器

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

您的功能应如下所示

[BroadcastReceiver]
    [IntentFilter(new[] { Intent.ActionBootCompleted }, Categories = new[] { Intent.CategoryDefault })]
    public class BootCompletedIntentReceiver : BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            if (intent.Action == Intent.ActionBootCompleted)
            {
                context.StartService(new Intent(context, typeof(YourService)));
            }
        }
    }

中的服务内部
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)

启动任务Task.Run。做你的事情在这个任务。确保在服务销毁时停止它。您可以在服务中创建一个变量&#34; done&#34;并在你的任务循环中检查它。如果您不需要循环任务,您也可以在OnStartCommand中启动警报管理器。如果您不需要单独的服务,那么只需使用指定的引导接收器定义,它就会一直触发