1.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); 

//设置线程可后台运行,不会因为系统休眠而挂起

2.Screen.sleepTimeout = SleepTimeout.NeverSleep;

3.

android 保证屏幕黑屏之后线程可以继续运行

标签: androidAndroidgpsservice

2012-11-07 17:33 2356人阅读 评论(0) 收藏 举报

 分类:

android(30)  Android 问题解决(1) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

最近在做关于Android手机端gps定时定位的功能,需要每隔几秒钟将gps定位获取的经纬度上传至后台,但是发现某些手机在屏幕黑屏,进入休眠状态后,后台就没有收到定位信息了,后来通过网上查找资料,发现一旦手机在休眠的时候,手机的cpu也休眠了,创建的线程也会sleep,所以为了让手机屏幕黑屏之后,上传线程可以继续运行,就必须保存手机CPU一直处于运行状态,综合网上所查找的资料,发现可以通过使用android的PowerManager和PowerManager.WakeLock这两个类来控制,具体关于这两个类的使用可以参考:http://www.cnblogs.com/keyindex/articles/1819504.html

下面来说一下我的GPS定时定位主要思想:

1、要实现程序退出之后,仍然可以定时上传定位信息,必须采用service,service可以保持在后台一直运行,除非系统资源极其匮乏,否则一般来说service是不会被系统杀死的。

2、要实现定时上传,因为android系统自带的gps定位功能本身自带就有循环定位的功能,所以直接利用此功能即可实现定时上传了。

代码如下所示:

[java] view plain copy

  1. /**
  2. * 获取gps位置信息的service
  3. *
  4. * @author king
  5. *
  6. */
  7. public class MyService extends Service {
  8. private LocationManager locationManager;
  9. private PowerManager pm;
  10. private PowerManager.WakeLock wakeLock;
  11. private GPSUploadThread myThread;
  12. @Override
  13. public IBinder onBind(Intent intent) {
  14. // TODO Auto-generated method stub
  15. return null;
  16. }
  17. @Override
  18. public void onCreate() {
  19. super.onCreate();
  20. //创建LocationManger对象(LocationMangager,位置管理器。要想操作定位相关设备,必须先定义个LocationManager)
  21. locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
  22. //利用Criteria选择最优的位置服务
  23. Criteria criteria = new Criteria();
  24. //设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细
  25. criteria.setAccuracy(Criteria.ACCURACY_FINE);
  26. //设置是否需要海拔信息
  27. criteria.setAltitudeRequired(false);
  28. //设置是否需要方位信息
  29. criteria.setBearingRequired(false);
  30. // 设置是否允许运营商收费
  31. criteria.setCostAllowed(true);
  32. // 设置对电源的需求
  33. criteria.setPowerRequirement(Criteria.POWER_LOW);
  34. //获取最符合要求的provider
  35. String provider = locationManager.getBestProvider(criteria, true);
  36. //绑定监听,有4个参数
  37. //参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种
  38. //参数2,位置信息更新周期,单位毫秒
  39. //参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息
  40. //参数4,监听
  41. //备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新
  42. locationManager.requestLocationUpdates(provider, 10000, 0,locationListener);// 2000,10
  43. }
  44. @Override
  45. public void onStart(Intent intent, int startId) {
  46. // TODO Auto-generated method stub
  47. super.onStart(intent, startId);
  48. //创建PowerManager对象
  49. pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
  50. //保持cpu一直运行,不管屏幕是否黑屏
  51. wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "CPUKeepRunning");
  52. wakeLock.acquire();
  53. }
  54. /**
  55. * 实现一个位置变化的监听器
  56. */
  57. private final LocationListener locationListener = new LocationListener() {
  58. @Override
  59. public void onLocationChanged(Location location) {
  60. // TODO Auto-generated method stub
  61. /**
  62. * 此处实现定位上传功能
  63. */
  64. }
  65. // 当位置信息不可获取时
  66. @Override
  67. public void onProviderDisabled(String provider) {
  68. // TODO Auto-generated method stub
  69. /**
  70. *
  71. */
  72. }
  73. @Override
  74. public void onProviderEnabled(String provider) {
  75. // TODO Auto-generated method stub
  76. }
  77. @Override
  78. public void onStatusChanged(String provider, int status, Bundle extras) {
  79. // TODO Auto-generated method stub
  80. }
  81. };
  82. @Override
  83. public void onDestroy() {
  84. // TODO Auto-generated method stub
  85. // toggleGPS(false);
  86. if (locationListener != null) {
  87. locationManager.removeUpdates(locationListener);
  88. }
  89. wakeLock.release();
  90. super.onDestroy();
  91. }
  92. }

关于unity android防止设备休眠相关推荐

  1. Unity Android 之 获取系统语言(手机设备设置的系统语言)的二种方式(中文区分简体、繁体、日文)

    Unity Android 之 获取系统语言的二种方式(中文区分简体.繁体.日文) 目录 Unity Android 之 获取系统语言的二种方式(中文区分简体.繁体.日文) 一.简单介绍 二.实现原理 ...

  2. android手机禁止休眠_Android的屏幕禁止休眠和锁屏的方法

    Android的屏幕禁止休眠和锁屏的方法 Android的屏幕禁止休眠的方法 .实现这一功能的方法有两种,一种是在的Manifest.xml文件里面声明,一种是在代码里面修改的LayoutParams ...

  3. Unity Android 接入高德定位SDK

    Unity版本 2020 第一步首先去高德开放平台注册账号然后申请Key 高德开放平台 | 高德地图API 注册好账号之后 点击控制台 然后选择管理key 新建一个应用 选择添加  然后创建一个key ...

  4. Unity app提高设备可用性

    / 支持 64 位架构 自 2019 年 8 月 1 日起,您在 Google Play 上发布的应用必须支持 64 位架构. 64 位 CPU 能够为您的用户提供更快.更丰富的体验.添加 64 位的 ...

  5. Unity Android真机测试

    Unity Android真机测试 两种方法,首先在你需要debug的代码位置用Debug.log("你想要的信息") 一.wifi 1.手机连数据线,要求电脑,手机同一网段,手机 ...

  6. unity安卓获取设备的gpu和cpu并进行适配

    unity怎么获取设备的gpu: 链接:https://docs.unity3d.com/cn/current/ScriptReference/SystemInfo.html 官方systemInfo ...

  7. Unity Android平台接入支付宝SDK

    这篇文章前面讲的创建Android Studio工程的流程是不正确的!!! 正确的流程请参见:Unity Android平台下插件/SDK开发通用流程 最近帮一个群里的朋友接了一下支付宝的SDK,开发 ...

  8. Unity Android 之 在 Unity 中直接调用打开其他应用apk的方法实现

    Unity Android 之 在 Unity 中直接调用打开其他应用apk的方法实现 目录 Unity Android 之 在 Unity 中直接调用打开其他应用apk的方法实现 一.简单介绍 二. ...

  9. unity android 在后台运行_Unity学习—资源管理概览

    本文介绍了 Unity 常用四种默认路径,以及 AssetDataBase.Resources.AssetBundle 和目前最新的 Addressable 四种资源管理方式 文中所有 API 均以版 ...

最新文章

  1. AI一分钟|阿里成立“罗汉堂”;vivo微信人脸识别支付下半年商用
  2. 跨域请求,关于后端session会话丢失的解决办法
  3. 吐槽贴:用ELECTRA、ALBERT之前,你真的了解它们吗?
  4. 多标签分类_多标签分类文献阅读(8)
  5. 证明randomized quicksort的平均running time为nlgn 的数学过程
  6. Qt编程之对QGraphicsItem点击右键弹出菜单
  7. wpf中的默认右键菜单中的复制、粘贴、剪贴等没有本地化的解决方式
  8. 三星app图标不见了怎么恢复_手机便签的内容不见了怎么恢复?试试这款便签软件的时间轴功能...
  9. linux kernel directory
  10. android 驱动开发教程,Android驱动开发入门
  11. 我拍了拍Redis,被移出了群聊···
  12. 求两函数交点c语言,怎样求两个函数关系式的交点坐标
  13. 信息安全常见名词解释
  14. 有赞搜索系统的架构演进
  15. 信息与计算机科学讲座,【创新创业 计科在行动】2015级信息与计算科学专业大学生创新讲座、专业教育讲座暨学术前沿讲座专题报道...
  16. 【python】身份证识别
  17. Linux静态库与动态库的概念及制作
  18. Conflux 的自我进化:从 DAG 到树图| 对话伍鸣
  19. labview与单片机正弦信号_labview与单片机串口通信
  20. 基于PHP的租赁商城系统(包括数据库和后台)

热门文章

  1. CSS3实现立体旋转动画效果
  2. Java版QQ聊天工具
  3. 优化模型验证关键代码18:基于Mvar和getA的对偶模型构建及拓展分析
  4. 文华财经wh8-trend1组合-保证金20万-最大使用1.8万,年华收益21%,最大回撤9.8%
  5. adjacent angle_【数学几何的英语用语包括图形的名称.】作业帮
  6. 烤仔说元宇宙 | 游戏还是元宇宙傻傻分不清楚?
  7. 推荐一些2021年整理27套微信小程序的毕业设计、毕设参考作品案例
  8. 洛谷 P3797 妖梦斩木棒
  9. java奥特曼对战小怪兽_“奥特曼攻打小怪兽”java打怪升级第一步
  10. 2022-解决Android studio 模拟机没有网络,app接口api运行不起来的问题