解决高德地图锁屏黑屏定位不更新,高德地图绘制定位轨迹,高德定位判断定位停留点,高德地图将所有坐标绘制在可视区域内

来源:互联网 发布:腾讯围棋 mac 编辑:程序博客网 时间:2024/05/19 12:15

本文章主要介绍 高德定位锁屏黑屏定位不更新的问题。

实现流程是:程序开始阶段正常执行定位,注册监听锁屏监听,唤醒cpu监听,当锁屏 广播每2秒发起一起单次定位唤醒。源码如下:

package net.tycmc.zuoyedemo;


import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationListener;


import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.PowerManager;
import android.util.Log;
import net.tycmc.zuoyedemo.MainActivity.LocationReceiver;
import net.tycmc.zuoyedemo.MainActivity.Mreceiver;


public class Demo extends Activity implements AMapLocationListener{


private AlarmManager am;
 private PendingIntent pi;
 private Mreceiver mreceiver;
 private PowerManager.WakeLock wl=null;
 LocationReceiver locationReceiver;;
 @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
PowerManager pm=(PowerManager) this.getSystemService(Context.POWER_SERVICE);
wl=pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"mywakrlock");
         wl.setReferenceCounted(false);
        //注册锁屏广播,主要是解决高德在锁屏黑屏情况下定位不更新的问题
         IntentFilter intentfilter=new IntentFilter();
         intentfilter.addAction(Intent.ACTION_SCREEN_ON);
         intentfilter.addAction(Intent.ACTION_SCREEN_OFF);
         intentfilter.addAction(Intent.ACTION_USER_PRESENT);
         mreceiver=new Mreceiver();
registerReceiver(mreceiver,intentfilter);

//注册设置定时唤醒定位

IntentFilter intentFile = new IntentFilter();
   intentFile.addAction("repeating");
   locationReceiver = new LocationReceiver();
   registerReceiver(locationReceiver, intentFile);
   
   //写一个定时的Pendingintent
   Intent intent = new Intent();  
   intent.setAction("repeating"); 
  
   pi = PendingIntent.getBroadcast(this, 0, intent, 0);
  am = (AlarmManager)getSystemService(ALARM_SERVICE);   
}
 private void wake() {
// TODO Auto-generated method stub
     //每2秒激活广播,发起一次定位
    // startLocation(true);
     wl.acquire();
     am.setRepeating(0, System.currentTimeMillis(),2000, pi);
}
 class LocationReceiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
    Log.d("sunlei","定位重新获取");
//在这里重新申请定位
   
    //locationClient.startLocation();
   
   }


   }

   public class Mreceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action =intent.getAction();
//开屏
if(Intent.ACTION_SCREEN_ON.equals(action)){
Log.d("sunlei","开屏");
}//锁屏
else if(intent.ACTION_SCREEN_OFF.equals(action)){
Log.d("sunlei","锁屏");
//如果锁屏关闭当前常规定位方法,调用alarm,每2秒发动一次单次定位
//locationClient.stopLocation();
wake();


}//解锁
else if(intent.ACTION_USER_PRESENT.equals(action)){
Log.d("sunlei","解锁");
//am.cancel(pi);
}
}

}
@Override
public void onLocationChanged(AMapLocation arg0) {
// TODO Auto-generated method stub

}


}

权限为:<uses-permission android:name="android.permission.WAKE_LOCK"/>



在 http://download.csdn.net/detail/a872822645/9495895 中有关于本程序完整源代码。包含点击打开链接

解决高德地图锁屏黑屏定位不更新,高德地图绘制定位轨迹,高德定位判断定位停留点,高德地图将所有坐标绘制在可视区域内  。直接运行可用。

PS : 本人创建了 高德Android 开发 QQ技术讨论群,群号:304478210  欢迎大家进入  。互相咨询技术问题,以及代码共享。


2 0
原创粉丝点击