后台定位Android13后台定位方案
Posted 命运之手
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了后台定位Android13后台定位方案相关的知识,希望对你有一定的参考价值。
安卓发展了到了android13为止,性能和权限管理都比较完善了
一些特殊功能都有了自己的方案,虽然操作起来比较麻烦,但总算是有比较统一的方法了
后台定位方案主要从以下几个方面进行
注册权限
<!-- 前台定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 后台定位 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<!--悬浮窗-->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!-- 忽略电源优化 -->
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
动态申请权限
这里我们要前台定位和后台定位权限一起申请,并且将前台权限放在前面
并且权限同意时,一定要选择始终允许
requestPermission(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION
);
启动前台服务
服务只有以前台服务的形式进行启动,才能在应用切换到后台后,继续进行定位
首先我们要在Manifest.xml中将服务登记为前台服务,再以前台服务形式启动
<!-- 百度定位服务 -->
<service
android:name="com.baidu.location.f"
android:foregroundServiceType="location"
android:process=":BaiduLocate" />
Service service = null;
int foregroundServiceCode = 10001;
Notification notification = Notifications.buildForegroundNotification("正在为您定位", "这个服务保证软件能在后台继续获取位置信息");
service.startForeground(foregroundServiceCode, notification);
保活设置
到此为此,我们已经完成了所有必要的设置
在一些比较宽松的手机上,已经足够保证程序在一段时间内,能够在后台获取定位了
但不少第三方的系统,为了节约电量和性能,还必须额外进行一些保活设置
这个每个型号的手机,就都有所不同了,但整体上都围绕下面几个方面,只能靠大家去摸索了
- 允许在应用上层显示。应用切换到后台时,仍然展示一个1px悬浮窗,可以提升程序优先级
- 关闭电池优化。这样系统就不会为了节约电量而杀死定位服务了
- 允许应用后台运行。有些系统明确提供了这样的选项
- 允许应用自启动。有些系统的后台运行,是放在自启动界面一起管理的
cordova-ionic 应用程序在后台进行地理定位 - android 和 ios
【中文标题】cordova-ionic 应用程序在后台进行地理定位 - android 和 ios【英文标题】:cordova-ionic app take geolocation in background - android and ios 【发布时间】:2015-08-13 21:12:44 【问题描述】:我想使用 cordova 和 ionic 构建一个能够提供地理定位的应用程序。根据我的研究,当应用程序在后台运行时提供有关地理位置的信息存在一些问题。您能否就如何解决此问题提供任何提示或建议?谢谢 :D
【问题讨论】:
【参考方案1】:当然,使用此插件可以进行后台地理定位:cordova-plugin-background-geolocation。
添加 ngCordova 以通过 AngularJS 包装器与插件交互。
ngCordova 和 cordova-plugin-background-geolocation 的示例(来自 ngCordova 文档的示例):
module.controller('MyCtrl', function($scope, $cordovaBackgroundGeolocation)
var options =
// https://github.com/christocracy/cordova-plugin-background-geolocation#config
;
document.addEventListener("deviceready", function ()
// `configure` calls `start` internally
$cordovaBackgroundGeolocation.configure(options)
.then(
null, // Background never resolves
function (err) // error callback
console.error(err);
,
function (location) // notify callback
console.log(location);
);
$scope.stopBackgroundGeolocation = function ()
$cordovaBackgroundGeolocation.stop();
;
, false);
);
【讨论】:
我刚刚安装了插件和 ngCordova,我想用这个例子进行测试....请告诉我,如果我包括这个---->>desiredAccuracy: 10,stationaryRadius:20, distanceFilter: 30, notificationTitle: 'Background tracking', // 是的,将其添加到选项对象应该允许您测试插件。您必须尝试各种选项才能找到适用于您的应用的值。 嗨...我将“geolocation-background”包装在我的“$ionicPlatform.ready(function()”中并且似乎可以工作。我使用了这个解决方案,因为使用 ngCordova“设备就绪功能”没有t 工作。但是,因为这个函数超出了“$scope”覆盖(超出 app.controller),我的问题是,我怎样才能检测到这个函数中的点击事件?谢谢......我希望得到很好的解释: ))) 您可以在控制器中使用$ionicPlatform.ready()
。请务必将其包含在您的控制器定义中:module.controller('MyCtrl', function($scope, $ionicPlatform, $cordovaBackgroundGeolocation)
.
没问题,很高兴听到您成功了。祝你的项目好运。以上是关于后台定位Android13后台定位方案的主要内容,如果未能解决你的问题,请参考以下文章
uniapp 实时定位(系统后台运行支持息屏)插件 Ba-Location
uniapp 实时定位(高德后台运行支持息屏坐标转换距离计算) Ba-LocationAMap
cordova-ionic 应用程序在后台进行地理定位 - android 和 ios