Android定位获得经纬度(手机位置服务和百度定位)-阿里云开发者社区

开发者社区> 一叶飘舟> 正文

Android定位获得经纬度(手机位置服务和百度定位)

简介:
+关注继续查看
private double latitude = 0.0;
	private double longitude = 0.0;
<span style="white-space:pre">	</span>//利用手机位置服务定位
	void getLoaction() {
		final LocationManager locationManager = (LocationManager) getActivity()
				.getSystemService(Context.LOCATION_SERVICE);
		
		//创建一个criteria对象  
        Criteria criteria = new Criteria();     
        criteria.setAccuracy(Criteria.ACCURACY_COARSE);  
        //设置不需要获取海拔方向数据  
        criteria.setAltitudeRequired(false);     
        criteria.setBearingRequired(false);  
        //设置允许产生资费  
        criteria.setCostAllowed(true);     
        //要求低耗电  
        criteria.setPowerRequirement(Criteria.POWER_LOW);     
        String provider = locationManager.getBestProvider(criteria, false);     
        Log.i(TAG, "we choose "+ provider);  
        Location location = locationManager.getLastKnownLocation(provider);  
        //第一次获得设备的位置  
        updateLocation(location); 
        //重要函数,监听数据测试  
        locationManager.requestLocationUpdates(provider, 6000, 10,     
                       locationListener);     
		
	}
	
	 //创建一个事件监听器  
	private final LocationListener locationListener = new LocationListener() {
		public void onLocationChanged(Location location) {
			updateLocation(location);
		}

		public void onProviderDisabled(String provider) {
			updateLocation(null);
			Log.i(TAG, "Provider now is disabled..");
		}

		public void onProviderEnabled(String provider) {
			Log.i(TAG, "Provider now is enabled..");
		}

		public void onStatusChanged(String provider, int status, Bundle extras) {
		}
	};   
	      
	//获取用户位置的函数,利用Log显示  
	private void updateLocation(Location location) {
		Log.i(TAG, "updateLocation");
		if (location != null) {
			latitude = location.getLatitude();
			longitude = location.getLongitude();
			
			String oldLocation = MainUIActivity.mApplication.getLocation();
			String newLocation = longitude + "," + latitude;
			mCurCommunityPoint.setText(newLocation);
			newLocation = Utils.bd_encrypt(latitude, longitude);
			Log.i(TAG, "The location has changed.. " + newLocation);
			if (!newLocation.equals(oldLocation)) {
				mCurPageIndex = 1;
				mHandler.obtainMessage(GET_COMMUNITY_DATA,
						newLocation).sendToTarget();
			}
			
		}
	}
	//百度位置服务,百度定位sdk下载地址:http://developer.baidu.com/map/index.php?title=android-locsdk/guide/v5-0
	void getBaiduLoaction(){
		LocationClient mLocationClient = new LocationClient(getActivity());
		mLocationClient.registerLocationListener( new BDLocationListener() {
			
			@Override
			public void onReceiveLocation(BDLocation location) {
				onLocationChanged(location);
			}
		} );
		
		//注册监听函数
	    
	    LocationClientOption option = new LocationClientOption();
	    option.setLocationMode(LocationMode.Hight_Accuracy);//设置定位模式
	    option.setCoorType("gcj02");//返回的定位结果是百度经纬度,默认值gcj02
	    option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000ms
	    option.setIsNeedAddress(true);//返回的定位结果包含地址信息
	    option.setNeedDeviceDirect(true);//返回的定位结果包含手机机头的方向
	    mLocationClient.setLocOption(option);
	    
	    mLocationClient.start();
	}
	
	/**
	 * 当位置发生变化时触发此方法
	 * 
	 * @param location 当前位置
	 */
	public void onLocationChanged(BDLocation location) {
		if (location != null) {
			// 显示定位结果
			Log.d(TAG, location.getLongitude() + "  " + location.getLatitude());
			latitude = location.getLatitude();
			longitude = location.getLongitude();
			
			String oldLocation = MainUIActivity.mApplication.getLocation();
			String newLocation = longitude + "," + latitude;
			mCurCommunityPoint.setText(newLocation);
			newLocation = Utils.bd_encrypt(latitude, longitude);
			Log.i(TAG, "The location has changed.. " + newLocation);
			if (!newLocation.equals(oldLocation)) {
				mCurPageIndex = 1;
				mHandler.obtainMessage(GET_COMMUNITY_DATA,
						newLocation).sendToTarget();
			}
		}
	}


从准确度来说百度还是比较靠谱的。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android手机访问web服务器(post请求)
一:客户端—服务器连接操作类(HttpUtil) package com.example.userdatatoweb; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import
1370 0
iOS11问题: 定位服务在iOS11系统上不能使用?
iOS11问题: 定位服务在iOS11系统上不能使用? Q:我刚刚用iOS11 SDK重新构建了应用程序,发现定位服务现在根本不起作用。 原因:A:因为苹果现在增加了一项新的隐私保护功能 NSLocationAlwaysAndWhenInUseUsageDeion, 并且原有的 NSLocationAlwaysUsageDeion 被降级为 NSLocationWhenInUseUsageDeion。
959 0
高德在提升定位精度方面的探索和实践
阿里巴巴高级地图技术专家方兴在高德技术专场做了题为《向场景化、精细化演进的定位技术》的演讲,主要分享了高德在提升定位精度方面的探索和实践。
4273 0
+关注
1635
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载