作为移动开发的特点,地图功能绝对是不可或缺的。接下来我们就来通过一个小项目来达到入门的水平。
首先当然是申请密钥了,然后配置到项目了,我用的开发工具是Android Studio,以上的项目如果有不懂得需要自行百度。接下来我们就开始动手创建自己的项目,
我们首先在布局文件里添加一个TextView控件,用于使用文字显示自己的详细地理位置,这个没有难点。然后就需要我们在活动里面大展手脚了,如何开启定位服务呢?
我们需要通过实例化一个LocationClient对象,这里我们需要传入Context,可以写this,也可以写
getApplicationContext(),然后调用它的
registerLocationListener(new MyLocationListener())括号里面是我们注册的监听器,这个监听器实现了
BDLocationListener借口,我们需要在监听器里面的onReceiveLocation()方法里面写一些逻辑代码,注意括号里面我们需要加上BDLocationListener 对象 ,实际上DLocationnListener对象所带的数据就是开启定位功能后返回的数据,当然目前的数据我们 并看不懂,所以要再onReceiveLocation()方法里面写一些逻辑代码,目的是变成我们看的懂得信息。 ******** 接下来我们就需要在mLocationClient = new LocationClient(getApplicationContext()); mLocationClient.registerLocationListener(new MyLocationListener()); 注册一个监听器 后面添加SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); 注意SDKInitalizer.initialize()方法一定要在引入布局的代码前面 另外Android6.0以上的手机引入了运行时权限的功能,所以我们还需要进行一些列的权限申请,这个我就直接 把代码拉出来了List<String> permissionList = new ArrayList<>(); if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION); } if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.READ_PHONE_STATE); } if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (!permissionList.isEmpty()) { String [] permissions = permissionList.toArray(new String[permissionList.size()]); ActivityCompat.requestPermissions(MainActivity.this, permissions, 1); } else { requestLocation();//如果所有权限都同意了的话,开始进行然后我们就需要在监听器里面实现自己的内容了:}//申请权限,运行手机是6.0,引进了运行时权限requestLocation()方法里面的逻辑private void requestLocation() {
}在这个方法里面我们需要开始我们的第一次定位了,定位的话我们一定需要
LocationClientOption对象的一个实例,再在这个对象的基础上设置一些参数
private void requestLocation() {
LocationClientOption option = new LocationClientOption();
option.setCoorType("bd09ll");
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
option.setScanSpan(5000);
option.setIsNeedAddress(true);
//表示我们需要当前位置的详细信息
option.setOpenGps(true);
option.setNeedDeviceDirect(true);
mLocationClient.setLocOption(option);//最后一定要有这个方法,用来保证前面设置的一些参数可以实现
//创建一个LocationClientOption对象,并且进行初始化设置,记好最后一定要在
//onDestory()方法中进行销毁,防止费电
}
配置完成之后,我们并没有开启定位,我们只是设置了定位的模式,接下来,我们在这个方法里面
在加入baiduMap.setMyLocationEnabled(true);//默认开启定位 mLocationClient.start(); //开启定位,定位的结果放回到我们之前注册的监听器里面好了,目前定位就开启了。
定位的结果自然而然的就返回到了我们之前注册的监听器里面。public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { StringBuilder currentPosition = new StringBuilder(); currentPosition.append("纬度:").append(location.getLatitude()).append("\n"); currentPosition.append("经线:").append(location.getLongitude()).append("\n"); currentPosition.append("国家:").append(location.getCountry()).append("\n"); currentPosition.append("省:").append(location.getProvince()).append("\n"); currentPosition.append("市:").append(location.getCity()).append("\n"); currentPosition.append("区:").append(location.getDistrict()).append("\n"); currentPosition.append("街道:").append(location.getStreet()).append("\n"); currentPosition.append("定位方式:"); if (location.getLocType() == BDLocation.TypeGpsLocation) { currentPosition.append("GPS"); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) { currentPosition.append("网络")} positionText.setText(currentPosition); } }在这里,我们把BDLocation对象带的数据通过getProvince()或者此时,我们已经把主要定位功能完成了,不过我们要记得定位是一件很费电的工作,所以我们一定要在程序退出getLongitude()等等方法来换成我们可以看得懂得信息。
是关闭定位。@Override protected void onDestroy() { super.onDestroy(); mLocationClient.stop(); //停止定位 }
文件是根据郭霖老师的著作,自己理解打出来的,也在自己手机上实现了效果,或许还会有文章写百度地图SDK,
如果有一起学习的童鞋。Please