</pre><p>这个文档有一个button,点击了之后直接在TextView里显示出经纬度和物理位置,不通过开启百度地图之类的来得到,所有的到的方法全部在后台运行</p><p></p><p>先给Mainfest里面添加各种百度地图的权限和key码</p><p><pre name="code" class="html"> <uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</pre><pre name="code" class="html"><meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value=" 你自己的key码 " />
然后记得添加上定位的服务
<service
<span style="white-space:pre"> </span>android:name="com.baidu.location.f"
<span style="white-space:pre"> </span>android:enabled="true"
<span style="white-space:pre"> </span>android:permission="android.permission.BAIDU_LOCATION_SERVICE"
<span style="white-space:pre"> </span>android:process=":remote" >
</service>
在java文件里点击了按钮之后会调用封装的方法
case R.id.location_imageButton_location:
hashMap = LocationUtils.getlocation(LocationActivity.this);
latitude = (String) hashMap.get("latitude");
longitude = (String) hashMap.get("longitude");
address = (String) hashMap.get("address");
errorcode = (String) hashMap.get("errorcode");
<span style="white-space: pre;"> </span>//因为百度地图获取的时候errorcode会出现很多不同的错误,所以用if else来判断一下,给用户更好的体验
if("161".equals(errorcode)){
location_textView_location.setText(address);//显示物理地址
}else if("68".equals(errorcode)){
location_textView_location.setText("网络连接失败,请稍等后点击");
}else if("65".equals(errorcode)){
location_textView_location.setText("定位缓存的结果");
}else if("162".equals(errorcode) || "163".equals(errorcode) || "164".equals(errorcode) || "165".equals(errorcode) || "166".equals(errorcode) || "167".equals(errorcode)){
location_textView_location.setText("服务端定位失败,请稍等后点击");
}else{
location_textView_location.setText("网络不稳定,请稍等后点击");
}
//显示经纬度
textView1.setText(longitude);
textView2.setText(latitude);
break;
我用的是一个HashMap,得到经纬度和地址之后存入键值对,然后再返还出去,在调用的地方得到hashMap然后再把经纬度和地址取出来
import java.util.HashMap;
import android.content.Context;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
public class LocationUtils {
private static final String TAG = "LocationUtils";
private static LocationClient mLocClient;
public double mCurrentLatitude;
public double mCurrentLongtitude;
private static String latitude;
private static String longitude;
private static String address;
private static String errorcode;
private static BaiduMap mBaiduMap;
public static HashMap<String, Object> getlocation(final Context context){
HashMap<String,Object> hashMap = new HashMap<String, Object>();
MapView mMapView = new MapView(context);
mBaiduMap = mMapView.getMap();
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(LocationMode.NORMAL, true, null));
// 定位初始化
mLocClient = new LocationClient(context);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开gps
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 设置定位模式
option.setAddrType("detail");
option.setCoorType("gcj02"); // 设置坐标类型
option.setIsNeedAddress(true);
option.setAddrType("all");
option.setScanSpan(500);
option.setIsNeedAddress(true); // 返回的定位结果包含地址信息
option.setNeedDeviceDirect(true);//包含机头方向
mLocClient.setLocOption(option);
mLocClient.start();
//注册位置监听器
mLocClient.registerLocationListener(new BDLocationListener() {
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null) {
return;
}
StringBuffer sb1 = new StringBuffer(64);
StringBuffer sb2 = new StringBuffer(64);
StringBuffer sb3 = new StringBuffer(64);
StringBuffer sb4 = new StringBuffer(64);
sb1.append(location.getLatitude());//纬度
sb2.append(location.getLongitude());//经度
sb3.append(location.getAddrStr());//地址
sb4.append(location.getLocType());//错误码
latitude = sb1.toString().trim();
longitude = sb2.toString().trim();
address = sb3.toString().trim();
errorcode = sb4.toString().trim();
}
});
if (mLocClient.isStarted()) {
mLocClient.stop();
}else {
mLocClient.start();
}
hashMap.put("latitude", latitude);
hashMap.put("longitude", longitude);
hashMap.put("address", address);
hashMap.put("errorcode", errorcode);
return hashMap;
}
}
地址得到了,因为公司的原因,我马赛克了一下,,,
这个封装的方法有时候网慢或者是流量的话会获取不到,errorcode为62或者别的