GPS坐标在cordova应用程序的背景中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GPS坐标在cordova应用程序的背景中相关的知识,希望对你有一定的参考价值。
我目前正在使用ionic / cordova进行混合应用。该应用程序需要功能,它每隔1分钟左右将我们的后端与其位置相关联,如果附近有任何有趣的内容,后端API将会回答。如果答案是肯定的,应用程序将排队本地通知,希望这将使用户打开应用程序。当应用程序处于后台模式时,即使手机处于锁定状态,也需要此功能。该应用程序需要能够部署到应用程序商店,谷歌播放和最终Windows手机。
我目前正在使用这三个插件的组合:
https://www.npmjs.com/package/cordova-plugin-geolocation - 位置https://github.com/katzer/cordova-plugin-background-mode - 用于bg模式https://github.com/katzer/cordova-plugin-local-notifications - 用于本地通知
当设备未锁定时,这当前适用于android(因此它在前景和后台模式下工作)但是当设备被锁定时,它无法获得GPS坐标。
我的代码目前看起来像这样:
// Enable background worker
(cordova as any).plugins.backgroundMode.enable();
intervalPromise = $interval(intervalWork, 30000, 0, false);
function intervalWork() {
$log.log('Trying to fetch pos');
var options = { maximumAge: 30000, timeout: 30000, enableHighAccuracy: false };
navigator.geolocation.getCurrentPosition(success,
err,
options);
}
function success(pos) {
$log.log("lat: " + pos.coords.latitude + " long: " + pos.coords.longitude);
var Checkin = $resource(ApiDataEndpoint.url + 'checkin/:lat/:lng/', {});
var res= Checkin.get({ lat: pos.coords.latitude, lng: pos.coords.longitude });
if (res) {
$cordovaLocalNotification.schedule({
id: 1,
title: 'test',
text: 'test',
}).then(function(result) {
$log.log("ok");
});
};
}
所以...我的问题是:
1)如何在我的设备被锁定时使解决方案工作(即使设备被锁定但是返回超时,也会调用getCurrentPosition)?
2)是否有可能让这个解决方案在ios上运行?
3)以这种方式制作的应用程序是否会在Google Play和应用程序商店中获得批准?
4)如果项目注定失败了我的替代方案是什么?
我真的需要这方面的帮助!
所以我目前有一个应用程序可以解决您上面列出的所有问题,这里是我正在使用的插件:
https://github.com/mauron85/cordova-plugin-background-geolocation
- 该插件使用watchPosition()而不是getCurrentPosition(),因为这需要花费太长时间来不断ping设备并消耗更多电池电量。
- 这肯定适用于Android和iOS,但恕我直言,它比Android更适合Android,就精确度和保持活动功能而言。
- 我把它放入Google Play没问题,Apple确实允许这个插件,苹果商店有很多应用程序使用这个插件,但Apple可能最初拒绝它并询问应用程序的背景使用意图,然后你必须制作关于应用程序在后台执行的操作的一个吸引力,并确保它不会无限期地运行(这是我的经验)。 一个。您还要确保向Apple指出用户可以关闭背景地理位置跟踪的方法。我假设有吗?这是他们使用插件的主要问题。
祝好运。
这个插件有一个很好的指导如何使用流星服务器和cordova来做你需要的:
zeroasterisk/meteor-cordova-geolocation-background
它可以自动配置android和iOS。对于Windows手机我不知道。
- Meteor在Cordova中配置此插件(您必须配置)
- Meteor在Cordova中配置此插件(您必须配置)
- Meteor可以触发后台服务以获取地理位置(GPS)详细信息
- Cordova后台服务定期将其数据发送到Meteor服务器(而不是客户端Cordova实例)
- Meteor Server可以更新集合(或其他任何东西)
- Meteor Client与服务器同步
我使用您使用的相同插件遇到了完全相同的问题。事实证明,这是一个设备权限问题。
cordova-plugin-geolocation插件没有在后台运行的权限,更重要的是它没有在后台跟踪GPS的权限。虽然cordova-plugin-background-mode插件允许您在后台执行代码,但在后台时您将无法获得GPS坐标。
解决方案是添加一个插件,支持在应用程序在后台获取位置数据。有几个插件支持这一点,包括mauron85/cordova-plugin-background-geolocation插件(如前所述)。另一种方法是使用cordova-custom-config插件,它允许您指定自己的自定义权限。真的可以添加任何插件,只要它支持后台位置服务。无需其他代码。
您可以通过打开应用程序设置(在iOS中)并确认“始终”选项可用来验证您是否具有正确的权限。
以上是关于GPS坐标在cordova应用程序的背景中的主要内容,如果未能解决你的问题,请参考以下文章
如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?
Phonegap GPS定位插件cordova-plugin-gpslocation