前面已经实现了初始化百度地图,但是其默认显示位置是北京地区。换言之,它并没有根据自己需要而定位不同的位置。这里要介绍的,就是要实现简单的定位功能。
在AndroidManifest.xml中的application标签中声明service组件,因为每个app都拥有自己单独的定位service:
<application
...
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
...
</application>
2.在AndroidManifest.xml中声明使用的权限。这个在第一篇介绍中,如果已经声明过了就足够使用,可以按照需求参考:
http://developer.baidu.com/map/index.php?title=android-locsdk/guide/v5-0
3.设置一个“我的位置”选项,这里不设置按钮,直接在菜单中显示点击,所以在res里面的menu文件夹下新建一个.xml文件(也可以用默认的),在里面设置一个item(这里用默认的main.xml):
<menu ... <item android:id="@+id/id_map_location" android:showAsAction="never" android:title="我的位置"/> </menu>
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();
}
}
}
}
这里已经实现了简单的定位功能,小伙伴们可以尝试一下~
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。