我是这个社区的新手,但我经常在这个地方查询我的问题已经很久了,从未失望过!但这次我很难找到完美的方法/答案/解决我的问题,所以我第一次不得不自己提问。
我正在创建一个像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);
}
我希望你能帮助我。如果我对这个问题感到疯狂,我不会写在这里。
谢谢你们!
答案 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中启动警报管理器。如果您不需要单独的服务,那么只需使用指定的引导接收器定义,它就会一直触发