Iphone 是否可以为Windows Phone 7.5或iOS创建后台服务?

Iphone 是否可以为Windows Phone 7.5或iOS创建后台服务?,iphone,windows-phone-7,Iphone,Windows Phone 7,我有一个Android应用程序,运行24/7的服务每5分钟获取一次手机的GPS位置并发送到服务器。这是要求 我可以为iPhone编写相同的服务吗?我不确定这是否可能 我可以为WP7编写相同的服务吗?我认为以前不可能运行服务。7.5版有什么变化吗 编辑: 我不知道为什么有人投了反对票。这是一个具体的是/否问题。在WP7中引入芒果中的背景任务是可能的。事实上,API提供了一种内置的轮询GPS的机制,它的电池效率更高 不确定它是否下降到5分钟,认为它是更大的东西,比如30分钟。它也无法与Windows

我有一个Android应用程序,运行24/7的服务每5分钟获取一次手机的GPS位置并发送到服务器。这是要求

我可以为iPhone编写相同的服务吗?我不确定这是否可能

我可以为WP7编写相同的服务吗?我认为以前不可能运行服务。7.5版有什么变化吗

编辑:
我不知道为什么有人投了反对票。这是一个具体的是/否问题。

在WP7中引入芒果中的背景任务是可能的。事实上,API提供了一种内置的轮询GPS的机制,它的电池效率更高

不确定它是否下降到5分钟,认为它是更大的东西,比如30分钟。它也无法与Windows服务相媲美,所以不要抱着这种心态。为了让手机对用户保持快速响应,后台任务受到很大的限制——要使用它们,你需要很好地满足需求

背景任务介绍,它还谈到了我提到的GPS的事情。整个系列非常值得您的带宽和时间下载和观看:


无法为iPhone应答。

在ios4+上也可以,但不会被时间触发。您可以注册精确位置(gps)或模糊位置(wifi和wan位置),可在后台获取,但并不总是能够将数据发送到服务器,因为在后台10分钟后,您的应用程序不允许保持网络连接处于活动状态。因此,你必须缓冲这些数据,并等待用户启动你的应用程序

ios会根据所需的准确度和时间将通知推送到您的应用程序

ios应用程序在服务和活动之间没有区别(比如android)。这一切都结合在一个应用程序中。

这里也有“一些限制”(很多),但也许Microsoft推送服务适合您:


因为轮询不是一种很好的做法,所以推送在这种情况下效果更好。

在WP7 Mango中,您无法从后台代理获取新位置。以下代码将返回最新的可用位置(最长15分钟):

专用地理位置GetCachedLocation()
{
地球坐标观测员;
geoWatcher=new GeoCoordinateWatcher();//以默认精度级别启动新的观察程序
geoWatcher.Start();
//获取最新缓存位置
地理位置=地理观察者位置;
geoWatcher.Stop();
返回位置;
}
如您所见,这使用了地理坐标追踪。根据MSDN(http://msdn.microsoft.com/en-us/library/hh202962(v=vs.92).aspx):

此API用于获取设备的地理坐标, 支持在后台代理中使用,但它使用缓存 位置值,而不是实时数据。缓存的位置值为 设备每15分钟更新一次


除此之外,我还没有找到太多的信息。您可以创建一个具有自定义精度的地理坐标追踪器,但我还没有对此进行测试。它可能会返回满足精度要求的最新可用缓存位置。

您能详细说明一下吗?当GPS被轮询时,我可以运行我的代码吗?或者它会进入一些存储,直到应用程序可见为止?我需要立即将这些GPS位置发送到服务器。可能?是的,可能,了解背景任务。但是,您会发现,为了让手机保持用户体验,您不得不在严格的条件下操作(处理能力小,时间短)。Adam谢谢。我希望这在8个月前我写Android应用程序时是可能的。30分钟对我的特殊需要来说还是太多了。有没有办法模拟更小的跨度?也许有多个任务在不同的时间运行?你不可能实现快速轮询机制,我认为每个应用程序只能注册一个任务:这很有意义。我知道完成任务需要15秒。这甚至不足以获得GPS位置。GPS可以分开使用吗?这15秒只用于向服务器发送更新?所以,像我的网站上的应用程序基本上不可能与iOs一起使用?是的。跟踪是可能的,但只有在应用程序“打开”(不在后台)的情况下,才能以可靠的方式发送实时流量。我知道这是不可能的。在我的例子中-驱动程序可能每天使用一次应用程序来发送消息或获取负载信息。但办公室需要知道他一直在哪里。所以,应用程序大部分时间都关闭了(90%的时间)。我是否正确理解在上次应用使用大约30分钟后,我无法向服务器发送更新?另一个注意事项。在Android中,我不保持HTTP连接。我每次更新时都会打开它(每15分钟一次)。我认为在应用程序关闭后10分钟,该应用程序不允许运行任何网络流量:既不打开新连接,也不保持连接打开。因此无法进行实时更新(原因:节省电池电量)。但可能有一些技巧(但我想,进入应用商店会很困难)
private GeoPosition<GeoCoordinate> GetCachedLocation()
{
    GeoCoordinateWatcher geoWatcher;
    geoWatcher = new GeoCoordinateWatcher(); //Start a new watcher with default level of accuracy
    geoWatcher.Start();
    //Get latest cached position
    GeoPosition<GeoCoordinate> position = geoWatcher.Position;
    geoWatcher.Stop();
    return position;
}