十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
前面已经实现了初始化百度地图,但是其默认显示位置是北京地区。换言之,它并没有根据自己需要而定位不同的位置。这里要介绍的,就是要实现简单的定位功能。
创新互联专注于邱县企业网站建设,响应式网站开发,成都商城网站开发。邱县网站建设公司,为邱县等地区提供建站服务。全流程按需网站建设,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
在AndroidManifest.xml中的application标签中声明service组件,因为每个app都拥有自己单独的定位service:
... android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > ...
2.在AndroidManifest.xml中声明使用的权限。这个在第一篇介绍中,如果已经声明过了就足够使用,可以按照需求参考:
http://developer.baidu.com/map/index.php?title=android-locsdk/guide/v5-0
3.设置一个“我的位置”选项,这里不设置按钮,直接在菜单中显示点击,所以在res里面的menu文件夹下新建一个.xml文件(也可以用默认的),在里面设置一个item(这里用默认的main.xml):
4.进行main.java的编写:
public class MainActivity extends Activity {
...
//定义相关定位变量
private LocationClient mLocationClient;
private MyLocationListener myLocationListener;
private boolean isFirstIn = true;
private double mLatitude;
private double mLongtitude;
private Context context;
private String mAddress;
//自定义定位图标
private BitmapDescriptor mIconLocation;
...
protected void onCreate(Bundle savedInstanceState) {
...
initLocation();//定位函数
...
}
private void initLocation(){
mLocationMode =LocationMode.NORMAL;//定义地图显示模式,这里是普通模式
mLocationClient =new LocationClient(this);//定位服务的客户端
myLocationListener = new MyLocationListener();//定位请求回调函数
mLocationClient.registerLocationListener(myLocationListener);//注册监听
LocationClientOption option = new LocationClientOption();//设置定位参数
option.setCoorType("bd09ll");//返回百度地图地标
option.setIsNeedAddress(true);//返回定位位置
option.setOpenGps(true);//打开GPS
option.setScanSpan(1000);//每1000ms扫描一次定位
mLocationClient.setLocOption(option);//设置LocationClientOption
//初始化图标,记得在res下的drawable文件下贴上自定义的图片
mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.test1);
}
//在onStart里面开启定位
protected void onStart() {
super.onStart();
mBaiduMap.setMyLocationEnabled(true);
if(!mLocationClient.isStarted())
mLocationClient.start();
}
//在onStop里面停止定位
protected void onStop() {
super.onStop();
mBaiduMap.setMyLocationEnabled(false);
mLocationClient.stop();
}
//这个是每个工程自定义的Menu监听,监听item是否被选中
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
//选中item时的动作定义
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.id_map_location:
LatLng latLng = new LatLng(mLatitude, mLongtitude);//取得目前位置的经纬度
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);//更新经纬度
mBaiduMap.animateMapStatus(msu);//以动画方式更新地图状态
Toast.makeText(context,mAddress,Toast.LENGTH_SHORT).show();//显示位置信息
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
private class MyLocationListener implements BDLocationListener{
public void onReceiveLocation(BDLocation location){
MyLocationData data = new MyLocationData.Builder()//
.accuracy(location.getRadius())//
.latitude(location.getLatitude())//
.longitude(location.getLongitude())//
.build();
mBaiduMap.setMyLocationData(data);
//设置自定义图标
MyLocationConfiguration config = new MyLocationConfiguration(mLocationMode, true, mIconLocation);
mBaiduMap.setMyLocationConfigeration(config);
//更新经纬度
mLatitude = location.getLatitude();
mLongtitude = location.getLongitude();
if(isFirstIn)
{
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
mBaiduMap.animateMapStatus(msu);
isFirstIn = false;
mAddress = location.getAddrStr();
Toast.makeText(context,mAddress,Toast.LENGTH_SHORT).show();
}
}
}
}
这里已经实现了简单的定位功能,小伙伴们可以尝试一下~