如何获取到经纬度和位置

来源:互联网 发布:淘宝买衣服靠谱吗 编辑:程序博客网 时间:2024/05/29 18:02
</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() {@Overridepublic 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或者别的

0 0
原创粉丝点击