我正在开发一个带有一些位置跟踪的Cordova

Android / iOS应用程序.

要不断更新位置,我使用背景地理定位插件(

https://github.com/mauron85/cordova-plugin-background-geolocation).

此插件创建一个侦听系统LocationManager的服务.

当系统获得位置更新时,插件会触发事件链/一些计算,直到它到达我在cordova应用程序中使用的最终JavaScript回调.

它在iOS上工作正常并且永远不会被杀死,但是当你把手机置于睡眠状态(锁定屏幕)而没有将应用程序置于前台时(我说你在锁定之前切换到另一个应用程序)时我遇到了Android问题.

如果您移动(从而获得位置更新),该过程将继续运行.但是如果你静止超过5分钟,后台位置服务就会停止,并且不会有更多的位置传递给我的JS回调.

在此之后,如果再次移动,服务将保持停止状态,直到您解锁屏幕并将应用程序置于前台.

这很烦人,因为我的应用程序完全基于此停止和停止模式,需要在锁定的屏幕(口袋中的电话)下运行,并且我的服务器检查位置的时间戳以过滤被认为在线并且活跃的新鲜位置位置,谁不是.

所以我基本上需要两件事:能够在用户再次移动时重新启动位置跟踪,并在用户空闲时继续向我的服务器发送一些位置.

根据我的研究,我最终创建了一个休眠60秒并循环回来的线程,每分钟调用我的后台服务的句柄位置功能(将位置发送到前面的JS).

不幸的是,我是Cordova Plugin的新手,并没有设法让它工作.我在尝试访问应用程序上下文的systemService时遇到空指针异常:

E/AndroidRuntime( 4627): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference

E/AndroidRuntime( 4627): at android.content.ContextWrapper.getSystemService(ContextWrapper.java:583)

E/AndroidRuntime( 4627): at com.tenforwardconsulting.cordova.bgloc.ForcedUpdateLocation.handleLocationFromOutside(ForcedUpdateLocation.java:12)

E/AndroidRuntime( 4627): at com.tenforwardconsulting.cordova.bgloc.BackgroundGeolocationPlugin$3.run(BackgroundGeolocationPlugin.java:266)

E/AndroidRuntime( 4627): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)

E/AndroidRuntime( 4627): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)

E/AndroidRuntime( 4627): at java.lang.Thread.run(Thread.java:818)

插件的启动功能:

public ComponentName startBackgroundService () {

if (isEnabled) { return null; }

Class serviceProviderClass = null;

try {

serviceProviderClass = ServiceProvider.getClass(config.getServiceProvider());

} catch (ClassNotFoundException e) {

callbackContext.error("Configuration error: provider not found");

return null;

}

Activity activity = this.cordova.getActivity();

Log.d(TAG, "Starting bg service");

registerActionReceiver();

locationServiceIntent = new Intent(activity, serviceProviderClass);

locationServiceIntent.addFlags(Intent.FLAG_FROM_BACKGROUND);

// locationServiceIntent.putExtra("config", config.toParcel().marshall());

locationServiceIntent.putExtra("config", config);

isEnabled = true;

//Start a thread to send a position every 60s

final ForcedUpdateLocation ful = new ForcedUpdateLocation();

cordova.getThreadPool().execute(new Runnable(){

public void run(){

try {

while(isEnabled){

Thread.sleep(3000);

Log.d(TAG, "Force location sent");

ful.handleLocationFromOutside();

}

} catch (InterruptedException e){

Log.d(TAG, "EXCEPTION ! Force location sent", e);

}

}

});

return activity.startService(locationServiceIntent);

}

我的存根“ForcedUpdateLocation”服务扩展了插件的LocationService(调用handleLocation):

package com.tenforwardconsulting.cordova.bgloc;

import android.location.Location;

import android.content.Context;

import android.location.LocationManager;

public class ForcedUpdateLocation extends com.tenforwardconsulting.cordova.bgloc.AbstractLocationService {

public void handleLocationFromOutside (){

LocationManager locationMangerWakeThread = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

Location location = locationMangerWakeThread.getLastKnownLocation(locationMangerWakeThread.GPS_PROVIDER);

handleLocation(location);

}

@Override

protected void cleanUp(){

//Stub

};

@Override

protected void startRecording(){

//Duh

};

@Override

protected void stopRecording(){

//Wouf ?

};

}

除了我坚持这个事实,我发现这个解决方案真的很难看……

那么保持这项服务运行的最佳方法是什么?是否有最佳做法可以在后台长时间保持空闲进程?

非常感谢

java cordova_java – Cordova android后台插件在5分钟后被杀死相关推荐

  1. 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例

    前提 Cordova Android 7.0.0开始改变了项目安卓平台的架构.新建一个空项目分别添加Android 6.4.0 和 Android 7.0.0平台: cordova platform ...

  2. 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例 1

    2019独角兽企业重金招聘Python工程师标准>>> 前提 Cordova Android 7.0.0开始改变了项目安卓平台的架构.新建一个空项目分别添加Android 6.4.0 ...

  3. android支付宝插件,GitHub - DmcSDK/cordova.plugin.alipay: cordova 支付宝支付插件,支持IOS Android。...

    cordova.plugin.alipay cordova 支付宝支付插件 cordova plugin add https://github.com/DmcSDK/cordova.plugin.al ...

  4. Android ADT插件更新后程序运行时抛出java.lang.VerifyError异常解决办法

    当我把Eclipse中的 Android ADT插件从21.1.0更新到22.0.1之后,安装后运行程序抛出java.lang.VerifyError异常. 经过调查,终于找到了一个有效的解决办法: ...

  5. android 阿里巴巴插件,阿里巴巴 Java开发规约插件使用 (同样适用Android)

    Alibaba于在杭州云栖大会<研发效能峰会>上,正式发布<阿里巴巴Java开发手册>扫描插件,该插件在扫描代码后,将不符合<手册>的代码按Blocker/Crit ...

  6. Cordova Android App版本更新插件cordova-plugin-android-update

    文章版权声明:https://blog.csdn.net/qq_23179075/article/details/86581672 cordova-plugin-android-update App ...

  7. Java与RabbitMQ(二)启动rabbitmq web管理后台插件

    RabbitMQ 插件是由 Erlang 语言编写的,并且和服务器是一起运行在同一个 Erlang VM 中的.关于如何安装rabbitmq,请参考如何使用rabbitmq. 为什么需要managem ...

  8. android异常相机处理器,Cordova Android Camera-提供非法参数异常

    我2个月后开始使用cordova Android编程 . 一切都很好主要是现在没有工作的相机 . 但上周一些我的项目目录如何被删除,我重新安装所有插件的cordova和编译项目,但现在它显示错误'非法 ...

  9. 携程Android App插件化和动态加载实践

    转载自:http://www.infoq.com/cn/articles/ctrip-android-dynamic-loading?email=947091870@qq.com 编者按:本文为携程无 ...

最新文章

  1. iOS开发小技巧--利用苹果官方API播放视频(方法已经过时,了解一下)
  2. 数字图像处理 python_5使用Python处理数字的高级操作
  3. 8大排序算法图文讲解转
  4. 怎样编写一个Photoshop滤镜(3)-- Scripting Plug-ins
  5. 第一个工程 HttpLoader
  6. PCL点云库:ICP算法
  7. 如何给Exadata数据库一体机打补丁patching图解
  8. VC++ 添加用户环境变量
  9. 1052. Linked List Sorting (25)再
  10. oracle 外连接内连接,oracle多表查询之内连接,外连接语句总结
  11. MYSQL数据库日志
  12. 【SpringMVC注解篇】SpringMVC 注解驱动开发(二)JSON数据交互相关注解
  13. 文献解读-物理信息深度学习(PINN)
  14. 第5章 初识SqlSugarCore之内置逻辑分页
  15. 金山毒霸修复dns服务器,DNS被劫持或提示配置错误,该怎么解决
  16. 初入Kaggle之数据集的使用及预测结果生成
  17. matlab获取基金数据,读取WIND数据(行情、基金净值等)的SAS程序
  18. java-生产环境不重启 JVM,替换掉已经加载的类
  19. 没有项目经验?软件测试简历项目经验怎么写...
  20. 什么是外键? 为什么需要外键?怎么使用外键?

热门文章

  1. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第2章-带时延位置的离散多智能体系统的一致性
  2. 2.1 词汇表征-深度学习第五课《序列模型》-Stanford吴恩达教授
  3. 7.5 程序示例--PCA for 数据可视化-机器学习笔记-斯坦福吴恩达教授
  4. Sphinx+gitee+Read the Docs搭建在线文档系统
  5. 【随机共振】基于随机共振的高频弱信号检测的MATLAB仿真
  6. 基于FPGA的BP神经网络的verilog实现
  7. C1之路 | 训练任务03-WEB
  8. proguard的简单配置说明
  9. 2D 游戏引擎 AlloyGameEngine
  10. DB1:数据库的创建和文件的修改