关于unity android防止设备休眠

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值