网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月31日漏签0天
android开发吧 关注:225,838贴子:948,814
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 12回复贴,共1页
<<返回android开发吧
>0< 加载中...

基于百度地图的防走丢系统(只给部分重要源码)

  • 只看楼主
  • 收藏

  • 回复
  • minicow11
  • 初一年级
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
前段时间,看见贴吧里面有人想要一个类似的系统,于是重新研究了一下百度地图,写了一个小的demo。
设计百度地图的功能有:定位、显示地图、将地图拉到指定点、在地图上标点。
想要了解以上功能或学习更多百度地图提供的功能,请自行查看官方的sdk文档。
下面是系统的展示和一些重要的源码。


  • minicow11
  • 初一年级
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

启动了一个前台服务,每隔一分钟获取到当前位置的经度、纬度和描述,通过机器的mac地址为id,将以上信息保存,并将最近10个点以0开头显示到地图上,蓝点和0号点为当前的位置。由于我10分钟内并没有移动过,所以所有的点重合在地图上。
下面是启动前台服务的代码,前台服务启动后会有一个标志显示在通知栏上。
/**
* 将该服务变为前台服务
*/
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
private void startNotification() {
Intent intent = new Intent(this, HomeActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
Notification notification = new Notification.Builder(this)
.setContentTitle("服务正在运行中")
.setSmallIcon(R.mipmap.ic_launcher_round)
.setContentIntent(pi)
.build();
startForeground(1, notification);
}


2026-03-31 20:20:40
广告
不感兴趣
开通SVIP免广告
  • minicow11
  • 初一年级
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

下面我开始移动,从我的初始位置移动到了另一个位置,由于我在6这个位置稍作了停留,所以他覆盖了3、4、5三个点,也就是说现在的地图上,0号点是我现在的位置,1号点是我一分钟前的位置,2号点是我2分钟前的位置、6号点是我3到6分钟前的位置,9号点是我7到9分钟前的位置。
下面是将地图中心移动到指定位置的代码,我一直都是将地图中心移动到我的当前位置。
/**
* 将地图移动到指定的location
*
* @param weiDu
* @param jingDu
* @param duration
* @param baiduMap
*/
protected void centerToLocation(double weiDu, double jingDu, int duration, BaiduMap baiduMap) {
LatLng cenpt = new LatLng(weiDu, jingDu);
//定义地图状态,地图缩放级别 3~19
MapStatus newMapStatus = new MapStatus.Builder().target(cenpt).zoom(16).build();
//定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(newMapStatus);
//改变地图状态
baiduMap.animateMapStatus(mMapStatusUpdate, duration);
}


  • minicow11
  • 初一年级
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

继续向前走,可以看见0、1、2、3、4、5号点已经显示出来了,而6、7、8三个点重合了,9单独显示在最后。
下面是在地图上画点的代码,我在地图上花了0-9十个点和一个表示当前位置的蓝点
/**
* 再地图上添加标注
*
* @param point
* @param bitmap
* @param baiduMap
*/
private void addMarkOnMap(LatLng point, BitmapDescriptor bitmap, BaiduMap baiduMap) {
//构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions()
.position(point)
.icon(bitmap);
//在地图上添加Marker,并显示
baiduMap.addOverlay(option);
}


  • minicow11
  • 初一年级
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

通过mac地址查询可以看到最近位置的经度、纬度、描述和时间。
当然如果你觉得mac地址太麻烦了,也可以使用账号密码登录来作为查询条件,我是懒得写账号密码登录了,所以选择了用机器的mac地址来做唯一标识。
下面是初始化百度地图和进行定位的代码。
/**
* 初始化百度地图
*/
private void initBaiDuMap() {
mLocationClient = new LocationClient(getApplicationContext());
option = new LocationClientOption();
option.setIsNeedLocationDescribe(true);
option.setIsNeedAddress(true);
option.setIsNeedLocationPoiList(true);
//可选,是否需要地址信息,默认为不需要,即参数为false
//如果开发者需要获得当前点的地址信息,此处必须为true
option.setOpenGps(true); // 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);
mLocationClient.setLocOption(option);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
SDKInitializer.initialize(this);
//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
SDKInitializer.setCoordType(CoordType.BD09LL);
}
/**
* 发起定位
* @param handler
* @param arg1
*/
public static void locateNow(final Handler handler, final int arg1) {
bdAbstractLocationListener = new BDAbstractLocationListener() {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
GuLogUtils.log("UploadLocationService", "发送了一次定位");
Message message = handler.obtainMessage();
message.arg1 = arg1;
message.obj = bdLocation;
handler.sendMessage(message);
mLocationClient.unRegisterLocationListener(bdAbstractLocationListener);
mLocationClient.stop();
}
};
mLocationClient.registerLocationListener(bdAbstractLocationListener);
mLocationClient.start();
}


  • minicow11
  • 初一年级
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
其他的一些小问题
(1)为了方便测试,我设置定时器为每分钟定位一次,设置获取数据为取最近10次.如果在实际的应用中,可以每小时定位一次,获取最近48次,这样你就可以知道,最近两天该mac的设备大致的运动轨迹。
(2)关闭界面后服务很容易被系统kill掉,导致定位功能无法正常运行。这种情况很好理解,如果系统不这样做,那么就可能会有成千上万的服务同时运行消耗电量。所有要保持服务一直运行需要:
A:加入厂家的白名单,告诉厂家系统我的这个服务很重要,你不能kill掉。(看网上的文章qq和微信就是这样的、我也不知道对不对)
B:使用广播(没试过,不知道行不行,可以自己尝试一下,但是网上是这么说的)。


  • minicow11
  • 初一年级
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶一顶


  • 白羊忍者龙剑传
  • 托儿所
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
mark


2026-03-31 20:14:40
广告
不感兴趣
开通SVIP免广告
  • minicow11
  • 初一年级
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶


  • minicow11
  • 初一年级
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶一下


  • minicow11
  • 初一年级
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶一下


  • minicow11
  • 初一年级
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 12回复贴,共1页
<<返回android开发吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示