地图应用之 :获取当前位置的经纬度
来源:互联网 发布:华三交换机开启端口 编辑:程序博客网 时间:2024/05/18 01:03
一:百度地图
说明:
1. 设置定位的模式是 LocationMode.Hight_Accuracy 时,在室内可能无法获取到准确的经纬度,会得到默认的值是4.9E-324
处理办法是将模式改为Battery_Saving,或到室外
2.可以根据当前设备网络连接情况和GPS是否开启来设定定位模式
//获得网络连接情况
ConnectivityManager cManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cManager.getActiveNetworkInfo();
//获取GPS的连接情况
LocationManager lManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(lManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
Toast.makeText(this, "GPS已开启", 0).show();
}
3.使用经纬度要在public void onReceiveLocation(BDLocation loc) {}方法中操作
步骤一:导入百度定位SDK包,以下包中,定位只需要BaiduLBS_Android.jar包
第二部:在AndroidManifest.xml清单文件中添加访问权限和服务等,代码如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.qf.location" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="8" 9 android:targetSdkVersion="18" />10 11 <!-- 添加的内容 1 (访问权限) -->12 <uses-permission android:name="android.permission.GET_ACCOUNTS" />13 <uses-permission android:name="android.permission.USE_CREDENTIALS" />14 <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />15 <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />16 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />17 <uses-permission android:name="android.permission.INTERNET" />18 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />19 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />20 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />21 <uses-permission android:name="android.permission.READ_PHONE_STATE" />22 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />23 <uses-permission android:name="android.permission.BROADCAST_STICKY" />24 <uses-permission android:name="android.permission.WRITE_SETTINGS" />25 <uses-permission android:name="android.permission.READ_PHONE_STATE" />26 <!-- 这个权限用于进行网络定位 -->27 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >28 </uses-permission>29 <!-- 这个权限用于访问GPS定位 -->30 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >31 </uses-permission>32 <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->33 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >34 </uses-permission>35 <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->36 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >37 </uses-permission>38 <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->39 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >40 </uses-permission>41 <!-- 用于读取手机当前的状态 -->42 <uses-permission android:name="android.permission.READ_PHONE_STATE" >43 </uses-permission>44 <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->45 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >46 </uses-permission>47 <!-- 访问网络,网络定位需要上网 -->48 <uses-permission android:name="android.permission.INTERNET" />49 <!-- SD卡读取权限,用户写入离线定位数据 -->50 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >51 </uses-permission>52 <!-- 允许应用读取低级别的系统日志文件 -->53 <uses-permission android:name="android.permission.READ_LOGS" >54 </uses-permission>55 56 <application57 android:allowBackup="true"58 android:icon="@drawable/ic_launcher"59 android:label="@string/app_name"60 android:theme="@style/AppTheme" >61 <activity62 android:name="com.qf.location.MainActivity"63 android:label="@string/app_name" >64 <intent-filter>65 <action android:name="android.intent.action.MAIN" />66 67 <category android:name="android.intent.category.LAUNCHER" />68 </intent-filter>69 </activity>70 71 <!-- 添加的内容 2 -->72 <meta-data73 android:name="com.baidu.lbsapi.API_KEY"74 android:value="Dt7Q30nVQMKbM3NT6GHnRnGq" />75 76 <service77 android:name="com.baidu.location.f"78 android:enabled="true"79 android:process=":remote" >80 </service>81 </application>82 83 </manifest>
第三步: 申请 百度地图开发密钥:在上步中显示的<meta_data >标签的value属性上设置
第四步:写代码获取当前位置经纬度:代码如下:
1 private LocationClient locClient; 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 7 //显示界面之前初始化 BaiduMap SDK 8 SDKInitializer.initialize(getApplicationContext()); 9 setContentView(R.layout.activity_main);10 11 12 getLocation();13 }14 15 16 //获取手机当前所在位置的经纬度17 public void getLocation(){18 //实例化位置客户端19 locClient = new LocationClient(getApplicationContext());20 //创建一个位置option对象21 LocationClientOption locOption = new LocationClientOption();22 23 //设置option的属性24 locOption.setCoorType("bd09II"); // bd09II表示返回的结果是百度的经纬度25 locOption.setIsNeedAddress(true); //返回的信息包含当前的地址26 locOption.setNeedDeviceDirect(true); //返回的内容包含手机机头的方向27 locOption.setScanSpan(5000); //每5秒发起一次定位请求28 locOption.setLocationMode(LocationMode.Hight_Accuracy); //高精度模式,网络和GPS29 30 31 //将封装的参数设置到位置客户端32 locClient.setLocOption(locOption);33 34 //给位置客户端注册位置监听器35 locClient.registerLocationListener(new BDLocationListener() {36 37 @Override38 public void onReceiveLocation(BDLocation loc) {39 double latitude = loc.getLatitude();40 double longitude = loc.getLongitude();41 Toast.makeText(getApplicationContext(), latitude+":"+longitude, 0).show();42 43 /*================================此处定义接口=====================*/44 45 } 46 });47 48 //启动位置客户端49 locClient.start();50 51 }
二. 高德地图
说明:高德地图提供了三种定位模式,下面以混合模式为例,
注册监听的方法为 requestLocationData(String provider, long minTime, float minDistance, AMapLocationListener listener) 方法,其中参数:
- provider:有三种定位Provider供用户选择,分别是:LocationManagerProxy.GPS_PROVIDER,代表使用手机GPS定位;LocationManagerProxy.NETWORK_PROVIDER,代表使用手机网络定位;LocationProviderProxy.AMapNetwork,代表高德网络定位服务,混合定位。
- minTime:位置变化的通知时间,单位为毫秒。如果为-1,定位只定位一次。
- minDistance:位置变化通知距离,单位为米。
- listener:定位监听者。
步骤一:将高德定位包拷贝到libs目录下
步骤二:在AndroidManifest.xml文件中添加相应的内容
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.don.amaplocationdemotest" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="8" 9 android:targetSdkVersion="18" />10 11 <!-- 添加内容1 :访问权限 -->12 <uses-permission android:name="android.permission.INTERNET" />13 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />14 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />15 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />16 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />17 <uses-permission android:name="android.permission.READ_PHONE_STATE" />18 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />19 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />20 <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />21 <uses-permission android:name="android.permission.WAKE_LOCK" />22 <uses-permission android:name="android.permission.WRITE_SETTINGS" />23 24 25 <application26 android:allowBackup="true"27 android:icon="@drawable/ic_launcher"28 android:label="@string/app_name"29 android:theme="@style/AppTheme" >30 31 <!-- 添加内容2 -->32 <meta-data33 android:name="com.amap.api.v2.apikey"34 android:value="b772627bc616d5bf0b4f9371807cd60a" />35 36 <activity37 android:name="com.don.amaplocationdemotest.MainActivity"38 android:label="@string/app_name" >39 <intent-filter>40 <action android:name="android.intent.action.MAIN" />41 42 <category android:name="android.intent.category.LAUNCHER" />43 </intent-filter>44 </activity>45 <activity46 android:name="com.don.amaplocationdemotest.MNetLocationActivity"47 android:label="@string/title_activity_mnet_location" >48 </activity>49 <activity50 android:name="com.don.amaplocationdemotest.MGpsLocationActivity"51 android:label="@string/title_activity_mnet_location" >52 </activity>53 <activity54 android:name="com.don.amaplocationdemotest.MMultyLocationActivity"55 android:label="@string/title_activity_mnet_location" >56 </activity>57 </application>58 59 </manifest>
步骤三:在官网申请key,添加到步骤二的清单文件中
步骤四:编写代码
1 package com.don.amaplocationdemotest; 2 3 import android.app.Activity; 4 import android.location.Location; 5 import android.os.Bundle; 6 import android.os.Handler; 7 import android.os.Message; 8 import android.view.Window; 9 import android.widget.TextView; 10 11 import com.amap.api.location.AMapLocation; 12 import com.amap.api.location.AMapLocationListener; 13 import com.amap.api.location.LocationManagerProxy; 14 import com.amap.api.location.LocationProviderProxy; 15 16 public class MMultyLocationActivity extends Activity implements 17 AMapLocationListener { 18 private LocationManagerProxy locationManagerProxy; 19 private TextView latitude_txt; // 纬度 20 private TextView longitude_txt; // 经度 21 private TextView address_txt; // 地址信息 22 private Handler handler = new Handler() { 23 public void handleMessage(android.os.Message msg) { 24 if (msg != null) { 25 AMapLocation loc = (AMapLocation) msg.obj; 26 latitude_txt.setText("纬度:" + loc.getLatitude()); 27 longitude_txt.setText("经度:" + loc.getLongitude()); 28 address_txt.setText("地址信息:" + loc.getAddress()); 29 30 } 31 32 }; 33 34 }; 35 36 @Override 37 protected void onCreate(Bundle savedInstanceState) { 38 super.onCreate(savedInstanceState); 39 requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置没有标题栏 40 setContentView(R.layout.activity_mmulty_location); 41 init(); 42 initView(); 43 } 44 45 public void init() { 46 locationManagerProxy = LocationManagerProxy.getInstance(this); 47 locationManagerProxy.setGpsEnable(false); 48 locationManagerProxy.requestLocationData( 49 LocationProviderProxy.AMapNetwork, 30 * 1000, 10, this); 50 } 51 52 public void initView() { 53 latitude_txt = (TextView) findViewById(R.id.mutxt_latitude); 54 longitude_txt = (TextView) findViewById(R.id.mutxt_longitude); 55 address_txt = (TextView) findViewById(R.id.mutxt_address); 56 57 } 58 59 @Override 60 public void onLocationChanged(AMapLocation aMapLocation) { 61 if (aMapLocation != null 62 && aMapLocation.getAMapException().getErrorCode() == 0) { 63 Message msg = Message.obtain(handler, 0, aMapLocation); 64 handler.sendMessage(msg); 65 } 66 } 67 68 @Override 69 public void onLocationChanged(Location arg0) { 70 // TODO Auto-generated method stub 71 72 } 73 74 @Override 75 public void onProviderDisabled(String arg0) { 76 // TODO Auto-generated method stub 77 78 } 79 80 @Override 81 public void onProviderEnabled(String arg0) { 82 // TODO Auto-generated method stub 83 84 } 85 86 @Override 87 public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 88 // TODO Auto-generated method stub 89 90 } 91 92 @Override 93 protected void onPause() { 94 super.onPause(); 95 // 移除定位请求 96 locationManagerProxy.removeUpdates(this); 97 // 销毁定位 98 locationManagerProxy.destroy(); 99 }100 101 }
- 地图应用之 :获取当前位置的经纬度
- 谷歌地图应用之如何从谷歌地图获得当前位置的经纬度信息
- Android之获取当前位置的经纬度
- 百度地图api 获取当前位置经纬度。自驾俩点间的路线。
- Andriod获取当前位置的经纬度
- Android获取当前位置的经纬度
- 【Android 】获取当前位置的经纬度
- android通过高德地图定位sdk获取当前位置的经纬度(只是经纬度哦)
- 使用html5获取当前手机的经纬度,并接入百度地图API,查询出当前位置
- 使用html5获取当前手机的经纬度,并接入百度地图API,查询出当前位置
- android定位:获取当前位置的经纬度
- iOS获取当前位置经纬度
- Geolocation获取当前位置的经纬度在百度地图中就是比google地图中精确的原因
- Geolocation获取当前位置的经纬度在百度地图中就是比google地图中精确的原因 .
- Geolocation获取当前位置的经纬度在百度地图中就是比google地图中精确的原因
- 百度地图最新版本sdk使用系列(八)-获取当前地图中心点的经纬度并计算与当前位置的距离
- 02 使用百度地图获得当前位置的经纬度
- iOS 之获取地图经纬度
- Underscore轻量级模板解析函数
- 剑指offer经典编程(十八)
- JS获取时间学习
- 257. Binary Tree Paths
- CC2650DK平台下安装iar7.8及ble_stack_v2.2
- 地图应用之 :获取当前位置的经纬度
- Linux下安装、配置、启动Apache
- 2张图理解resnet核心思想
- Java for Web学习笔记(三五):自定义tag(3)TLDS和Tag Handler
- Mysql各个版本区别及官网下载
- 发送邮件
- eclipse配置tomcat问题
- codeforces 779 E. Bitwise Formula
- 摩拜CEO胡炜炜 一席 演讲中的 点亮北京,深圳骑行动态,地图技术实现