第103行: | 第103行: | ||
// 定位错误信息 | // 定位错误信息 | ||
if (error) { | if (error) { | ||
− | NSLog(@"locError:{%zd - | + | NSLog(@"locError:{%zd -%@};", error.code, error.localizedDescription); |
return; | return; | ||
} | } | ||
第127行: | 第127行: | ||
</pre> | </pre> | ||
− | <div class="pre-btn"><div class="pre-btn-copy-ios">复制</div><div class="pre-btn-cb-ios">深色</div></div><div class="success">复制成功</div></div></div> | + | <div class="pre-btn"><div class="pre-btn-copy-ios">复制</div><div class="pre-btn-cb-ios">深色</div></div><div class="success">复制成功</div></div></div></div></div> |
− | + | ||
− | </div></div> | + |
2022年1月21日 (五) 14:25的版本
后台持续定位
功能场景
本示例展示了在应用退后台的状态下,如何持续记录位置信息,增加定位进程存活率。
Android
iOS
//mapopen-website-wiki.bj.bcebos.com/demos/AndroidVideos/后台定位.mp4
1590746640|//mapopen-website-wiki.bj.bcebos.com/demos/newqrcodes/后台持续定位.png
扫码体验
使用产品
Android定位SDK|/index.php?title=android-locsdk
>
后台持续定位|/index.php?title=android-locsdk/guide/addition-func/android10-notice
下载源码
//mapopen-website-wiki.bj.bcebos.com/demos/location/ForegroundLocationDemo.zip
核心接口
类
接口
描述
LocationClient
start()
启动定位sdk
LocationClient
setLocOption(LocationClientOption locOption)
给定位客户端设置参数
LocationClient
enableLocInForeground(int id, android.app.Notification notification)
将定位SDK的SERVICE设置成为前台服务, 提高定位进程存活率
LocationClient
disableLocInForeground(boolean removeNotification)
关闭前台定位服务
LocationClientOption
setScanSpan(int scanSpan)
连续定位时间间隔,单位是毫秒 当<1000(1s)时,定时定位无效
BDAbstractLocationListener
onReceiveLocation(BDLocation location)
监听定位结果回调函数
重点关注
为了保证定位可以在后台一直运行,开发者可以通过开启前台服务,来保证SDK服务的存活,达到后台定位效果。
核心代码
1.创建前台通知服务
JAVA
/** * 初始化前台服务 */ private void initNotification () { //设置后台定位 //android8.0及以上使用NotificationUtils if (Build.VERSION.SDK_INT >= 26) { NotificationUtils notificationUtils = new NotificationUtils(this); Notification.Builder builder = notificationUtils.getAndroidChannelNotification ("适配android 8限制后台定位功能", "正在后台定位"); mNotification = builder.build(); } else { //获取一个Notification构造器 Notification.Builder builder = new Notification.Builder(MainActivity.this); Intent nfIntent = new Intent(MainActivity.this, MainActivity.class); builder.setContentIntent(PendingIntent. getActivity(MainActivity.this, 0, nfIntent, 0)) // 设置PendingIntent .setContentTitle("适配android 8限制后台定位功能") // 设置下拉列表里的标题 .setSmallIcon(R.mipmap.ic_launcher) // 设置状态栏内的小图标 .setContentText("正在后台定位") // 设置上下文内容 .setWhen(System.currentTimeMillis()); // 设置该通知发生的时间 mNotification = builder.build(); // 获取构建好的Notification } mNotification.defaults = Notification.DEFAULT_SOUND; //设置为默认的声音 }
复制
深色
复制成功
2.将sdk服务设置为前台通知服务
JAVA
// 将定位SDK的SERVICE设置成为前台服务, 提高定位进程存活率 mClient.enableLocInForeground(1, mNotification);
复制
深色
复制成功
3.创建后台定位监听
JAVA
class MyLocationListener extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation bdLocation) { // 此处获取后台定位数据 } }
复制
深色
复制成功
4.配置后台连续定位参数并启动定位
JAVA
// 创建定位客户端 mClient = new LocationClient(this); myLocationListener = new MyLocationListener(); // 注册定位监听 mClient.registerLocationListener(myLocationListener); LocationClientOption mOption = new LocationClientOption(); // 可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的 mOption.setScanSpan(2000); // 可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll; mOption.setCoorType("bd09ll"); // 可选,默认false,设置是否开启Gps定位 mOption.setOpenGps(true); // 设置定位参数 mClient.setLocOption(mOption); // 启动定位 mClient.start();
复制
深色
复制成功