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();
			}
		}
	}


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

相关文章
|
1月前
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
58 4
|
1月前
|
安全 搜索推荐 Android开发
Android vs. iOS:解锁智能手机操作系统的奥秘####
【10月更文挑战第21天】 在当今这个数字化时代,智能手机已成为我们生活中不可或缺的伙伴。本文旨在深入浅出地探讨两大主流操作系统——Android与iOS的核心差异、优势及未来趋势,帮助读者更好地理解这两个平台背后的技术哲学和用户体验设计。通过对比分析,揭示它们如何塑造了我们的数字生活方式,并展望未来可能的发展路径。无论您是技术爱好者还是普通用户,这篇文章都将带您走进一个充满创新与可能性的移动世界。 ####
71 3
|
2月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
165 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
2月前
|
Web App开发 Android开发
利用firefox调试安卓手机端web
该教程详细介绍如何通过Firefox浏览器实现手机与电脑的远程调试。手机端需安装最新版Firefox,并按指定步骤设置完成;电脑端则需安装15版及以上Firefox。设置完成后,通过工具栏中的“远程调试”选项,输入手机IP地址即可连接。连接确认后,即可使用电脑端Firefox调试器调试手机上的Web信息。注意,调试前手机需提前打开目标网页。
99 2
|
3月前
|
Java 测试技术 Android开发
Android性能测试——发现和定位内存泄露和卡顿
本文详细介绍了Android应用性能测试中的内存泄漏与卡顿问题及其解决方案。首先,文章描述了使用MAT工具定位内存泄漏的具体步骤,并通过实例展示了如何分析Histogram图表和Dominator Tree。接着,针对卡顿问题,文章探讨了其产生原因,并提供了多种测试方法,包括GPU呈现模式分析、FPS Meter软件测试、绘制圆点计数法及Android Studio自带的GPU监控功能。最后,文章给出了排查卡顿问题的四个方向,帮助开发者优化应用性能。
211 4
Android性能测试——发现和定位内存泄露和卡顿
|
2月前
|
Android开发 iOS开发 UED
安卓与iOS的较量:谁才是智能手机市场的王者?
本文将深入探讨安卓和iOS两大智能手机操作系统之间的竞争关系,分析它们各自的优势和劣势。通过对比两者在市场份额、用户体验、应用生态等方面的表现,我们将揭示出谁才是真正的市场领导者。无论你是安卓粉丝还是iOS忠实用户,这篇文章都将为你提供一些有趣的观点和见解。
|
4月前
|
自然语言处理 定位技术 API
Android经典实战之如何获取图片的经纬度以及如何根据经纬度获取对应的地点名称
本文介绍如何在Android中从图片提取地理位置信息并转换为地址。首先利用`ExifInterface`获取图片内的经纬度,然后通过`Geocoder`将经纬度转为地址。注意操作需在子线程进行且考虑多语言支持。
270 4
|
4月前
|
Android开发
【Azure 环境】记录使用Notification Hub,安卓手机收不到Push通知时的错误,Error_Code 30602 or 30608
【Azure 环境】记录使用Notification Hub,安卓手机收不到Push通知时的错误,Error_Code 30602 or 30608
|
5月前
|
存储 移动开发 Android开发
使用kotlin Jetpack Compose框架开发安卓app, webview中h5如何访问手机存储上传文件
在Kotlin和Jetpack Compose中,集成WebView以支持HTML5页面访问手机存储及上传音频文件涉及关键步骤:1) 添加`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限,考虑Android 11的分区存储;2) 配置WebView允许JavaScript和文件访问,启用`javaScriptEnabled`、`allowFileAccess`等设置;3) HTML5页面使用`<input type="file">`让用户选择文件,利用File API;
|
5月前
|
人工智能 搜索推荐 vr&ar
苹果手机iOS18最新升级:植入AI人工智能,国内百度文心一言,国外GPT4o来辅助
iOS 18亮点速览:AI强化的Siri、RCS安卓消息兼容、自定义主屏、辅助功能增强,VR进步,新隐私工具,包括锁定APP和眼动追踪。Passwords app保障安全,Apple Intelligence提升个性化体验。
235 1
下一篇
DataWorks