应用后台持续定位 |
您所在的位置:网站首页 › 企业微信正在持续定位 › 应用后台持续定位 |
使用场景 该示例主要展示App切换到后台熄灭屏幕后如何持续获得设备位置。 用到产品Android 定位 SDK 核心类/接口 类 接口 说明 版本 AMapLocationClient startLocation(); 启动定位 V2.0.0版本起 setLocationOption(mLocationOption); 给定位客户端设置参数 V2.0.0版本起 AMapLocationClientOption setInterval(long time); 设置连续定位时间间隔 V2.0.0版本起 AMapLocationListener onLocationChanged(AMapLocation amapLocation) ; 监听器回调方法 V2.0.0版本起 核心难点首先在本地服务中启动连续定位功能,通过设置一个Alarm定期对本地服务进行周期唤起,从而达到后台持续定位的效果。 1、在本地服务里启动连续定位: Java//在activity中启动自定义本地服务LocationService getApplicationContext().startService(new Intent(this, LocationService.class)); //在LocationService中启动定位 mLocationClient = new AMapLocationClient(this.getApplicationContext()); mLocationOption = new AMapLocationClientOption(); // 使用连续定位 mLocationOption.setOnceLocation(false); // 每10秒定位一次 mLocationOption.setInterval(10 * 1000); mLocationClient.setLocationOption(mLocationOption); mLocationClient.setLocationListener(locationListener); mLocationClient.startLocation();2、创建并启动Alarm。 Java//创建Alarm并启动 Intent intent = new Intent("LOCATION_CLOCK"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); // 每十五秒唤醒一次 long second = 15 * 1000; alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), second, pendingIntent);3、通过Alarm启动本地服务,如果定位停止,在服务中再次启动。 Javapublic class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("LOCATION_CLOCK")) { Log.e("ggb", "--->>> onReceive LOCATION_CLOCK"); Intent locationIntent = new Intent(context, LocationService.class); context.startService(locationIntent); } } }然后,定期在CPU休眠之前进行屏幕点亮操作。这个操作会导致cpu无法休眠耗电量增加,请谨慎使用。 Javaif (powerManager == null) { //针对熄屏后cpu休眠导致的无法联网、定位失败问题,通过定期点亮屏幕实现联网,本操作会导致cpu无法休眠耗电量增加,谨慎使用 powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl=powerManager .newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.SCREEN_DIM_WAKE_LOCK, "bright"); wl.acquire(); //点亮屏幕 wl.release(); //释放 } |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |