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移动到我的位置注意imageButtonbutton一样需要和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
原创粉丝点击