GPS闹钟(实现基本定位,添加marker以及实现震动提醒)
来源:互联网 发布:cs6色环插件mac 编辑:程序博客网 时间:2024/06/05 15:58
源码在文章结尾给出
最终效果图:
设计步骤:
1. 首先利用百度SDK简单的显示经纬度。
2. 将地图显示出来。
3. 将地图移动到我的位置。
4. 添加一个imageButton,使点击它时,再次回到我的位置。
5. 添加地图点击方法,点击地图时获取该点经纬度,并在当前点创建一个marker。
6. 利用当前经纬度和目的地经纬度,计算两者距离。
7. 当到达目的地附近时,调用手机震动。
开发过程:
1.首先是要做到显示出地图并移动到我的位置。首先导入百度SDK,然后再进行编码即可,显示地图等并不难(百度即可),在此仅关键代码:
private void navigateTo(BDLocation location){ if(isFirstLocate){ isFirstLocate=false; Toast.makeText(this,"正在移动到:"+location.getAddrStr(),Toast.LENGTH_SHORT).show(); LatLng latLng=new LatLng(location.getLatitude(),location.getLongitude()); MapStatus.Builder builder = new MapStatus.Builder(); builder.target(latLng).zoom(16f); baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); } MyLocationData.Builder builder=new MyLocationData.Builder(); builder.latitude(location.getLatitude()); builder.longitude(location.getLongitude()); MyLocationData locationData=builder.build(); baiduMap.setMyLocationData(locationData);}
↑
移动到当前位置。
imageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LatLng latLng=new LatLng(mLocation.getLatitude(),mLocation.getLongitude()); MapStatus.Builder builder = new MapStatus.Builder(); builder.target(latLng).zoom(16f); baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); }});
↑
点击imageButton,移动到我的位置。注意:imageButton和button一样需要和ID绑定起来。
2.当基本地图做出来后就是要实现点击一下获取经纬度,和添加一个marker。
baiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() { @Override public void onMapClick(LatLng latLng) { baiduMap.clear();//用于点一下清除上一个marker BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.maker); //构建MarkerOption,用于在地图上添加Marker OverlayOptions option = new MarkerOptions().position(latLng).icon(bitmap); //在地图上添加Marker,并显示 baiduMap.addOverlay(option); distance= DistanceUtil. getDistance(latLng,myLatLng ); DecimalFormat fmt=new DecimalFormat("0.##"); Toast.makeText(getApplicationContext(),"设置目的地成功!您距离此处"+fmt.format(distance)+"米!", Toast.LENGTH_SHORT).show(); } @Override public boolean onMapPoiClick(MapPoi mapPoi) { return false; }});
↑
创建一个地图点击监听事件,获取当前经纬度,并创建marker。
其中
baiduMap.clear();//用于点一下清除上一个marker
用于清除上一个marker,达到点一下地图更换一个marker的效果。
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.maker);//构建MarkerOption,用于在地图上添加MarkerOverlayOptions option = new MarkerOptions().position(latLng).icon(bitmap);//在地图上添加Marker,并显示baiduMap.addOverlay(option);
↑
这里用来添加marker,注意maker为drawable中的图片名字。
参考官方文档,百度地图提供的计算距离的方法很简单,就一行
distance= DistanceUtil. getDistance(latLng,myLatLng );
到此,任务基本也就快完成了。只需再加一个edittext获取用户所需提醒距离,当实际距离小于用户所需提醒距离时调用手机震动即可。
3.调用手机震动。
在AndroidManifest中添加震动权限
<uses-permission android:name="android.permission.VIBRATE" />
然后再在代码中调用即可,调用代码如下。
private Vibrator vibrator;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); vibrator= (Vibrator)getSystemService(Context.VIBRATOR_SERVICE); long [] pattern = {1000,2000,1000,2000}; // 停止 开启 停止 开启 vibrator.vibrate(pattern,2); //重复两次上面的pattern 如果只想震动一次,index设为-1}public void onStop(){ super.onStop(); vibrator.cancel();}
到此基本程序已完成。
源码请访问本人github:https://github.com/wang19980301/GPS_clock
如有啥不明白,请在评论区留言。
1 0
- GPS闹钟(实现基本定位,添加marker以及实现震动提醒)
- iOS本地闹钟提醒实现
- android service实现循环定时提醒(仿闹钟)
- 闹钟基本实现
- [其它]闹钟基本实现
- UILocalNotification实现本地的闹钟提醒
- Android GPS定位实现
- 在app未开启时,实现对用户进行通知提醒功能总结(添加事件到手机系统日历并设置闹钟提醒)
- 在app未开启时,实现对用户进行通知提醒功能总结(添加事件到手机系统日历并设置闹钟提醒)
- Android GPS 定位的实现(1)
- js实现微信摇一摇以及震动
- 手把手教你实现百度基础地图+定位功能+设置中心点+添加Marker
- 安卓开发使用百度地图sdk实现定位,添加marker,城市切换等功能
- Android 实现闹钟以及通知
- Android GPS 定位的实现
- Android GPS 定位的实现
- Android GPS 定位的实现
- Android GPS 定位的实现
- 单例模式
- 中国内地人才短缺创五年之最 \"发愁职位\"榜曝光
- 生产者与消费者
- using声明
- 猜猜打印结果?
- GPS闹钟(实现基本定位,添加marker以及实现震动提醒)
- 复制高亮代码到印象笔记
- 工厂模式
- 测试——使用Windows Live Writer写日志
- 装饰者模式
- 【转】Activity的生命周期
- OpenglES Blend 笔记
- Linux图谱
- 策略模式