【发布时间】:2020-12-27 17:03:40
【问题描述】:
我正在开发 GPS 车辆地理定位应用程序。如果用户在应用程序设置中激活通知,那么它必须每 X 分钟开始检查服务器以验证是否有新车辆警报。为此,我需要一项服务,该服务可以在应用程序在前台运行并且即使用户将应用程序置于后台以继续搜索通知也能继续工作。
所以我尝试这样做(AppDelegate):
public override void DidEnterBackground(UIApplication application)
{
if (Preferences.Get(nameof(App.IsNotificationsServiceRunning), false))
{
nint taskID = UIApplication.SharedApplication.BeginBackgroundTask(() => { });
new Task(() => {
DoWork();
UIApplication.SharedApplication.EndBackgroundTask(taskID);
}).Start();
}
else
{
return;
}
}
//TIMER
public void DoWork()
{
var minutes = TimeSpan.FromMinutes(2);
Device.StartTimer(minutes, () => {
//check for notifications
checkNotificationsFromServer();
// Returning true means repeat this timer
return true;
});
}
public void checkNotificationsFromServer(){
//Some code here...
}
这段代码的问题是.. 首先,应用程序永远不会检查通知,直到它被放置在后台! 其次(有点奇怪),但这个解决方案适用于 iOS 模拟器,但不适用于物理设备(iphone 11)!这意味着当应用程序在后台时, checkNotificationsFromServer() 永远不会被调用!
有什么建议吗?
【问题讨论】:
-
我的建议是先搜索再提问,因为到目前为止我已经看到了至少十几个完全相同的问题。这样一来,您既浪费了自己的时间,也浪费了其他人的时间。
-
@IvanIčin 这不是我想要的,我正在尝试找到一个解决方案来启动一项任务(当应用程序在前台时)并让它在后台运行!
-
我在该问题中没有看到任何阻止您尝试找到的解决方案的答案。此外,为了为您的用例提供一些帮助,您需要通过推送通知来完成。
标签: ios xamarin.forms xamarin.ios background-service