我们经常需要一个按钮,当我们点击之后能够获取定位信息,并且在按钮上显示出来。我们可以通过百度地图来实现这个功能。当然跟显示地图一样,需要导入百度地图的包,只是可以只选择定位的服务就好了。
首先,写一个按钮,类似如下:
<Button
android:layout_width="110dp"
android:layout_height="40dp"
android:text="城市"
android:textSize="18sp"
android:id="@+id/citylocation"
android:layout_marginLeft="20dp"
android:layout_marginTop="30dp"
/>
一些定位相关的属性:
Button citySearch;
public LocationClient mLocationClient = null;
public MyLocationListenner myListener = new MyLocationListenner();
找控件,然后设置按钮的点击事件:
citylocation.setText("定位中...");
mLocationClient = new LocationClient( this );
mLocationClient.registerLocationListener(myListener);
setLocationOption();
mLocationClient.start();
//设置相关参数
private void setLocationOption() {
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); //打开gps
option.setServiceName("com.baidu.location.service_v2.9");
option.setAddrType("all");
option.setPriority(LocationClientOption.NetWorkFirst);
option.setPriority(LocationClientOption.GpsFirst); //gps
option.disableCache(true);
mLocationClient.setLocOption(option);
}
获取定位的城市,并赋值给控件,如果没定位出来可以设置按钮显示“定位失败”:
public class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
if (bdLocation.getCity() != null) {
citylocation.setText(bdLocation.getCity());
Log.i("location", bdLocation.getCity());
} else {
citylocation.setText("定位失败");
}
}
}
别忘记了要关闭服务:
@Override
public void onDestroy() {
if(mLocationClient!=null){
mLocationClient.stop();
}
super.onDestroy();
}
如果你还遇到没定位出来的问题,你有可能忘记在配置清单添加服务了。
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote">
<intent-filter>
<action android:name="com.baidu.location.service_v2.9" />
</intent-filter>
</service>
效果: