AndroidGPS定位应用流程

news/2024/7/7 16:07:09

AndroidGPS定位应用流程

这里先了解下应用层流程。

根据这个框架,GPS在应用层实现的最基本流程示例:
在这里插入图片描述

public class MainActivity extends Activity {
	private LocationManager mLocationManager;
 
	@Override
	protected void onDestroy() {
		super.onDestroy();
		mLocationManager.removeUpdates(locationListener);
	}
 
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
 
		/* 记得在AndroidManifest.xml文件中开启GPS相关的权限!!! */
		mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
 
		/* 检测GPS定位模块是否开启 */
		if (!mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
			/* 针对GPS定位模块是否开启,具体接下来做的事 */
			return;
		}
 
		Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
		updateLocationMessage(location);
		
		/* 监听GPS的状态变化 */
		mLocationManager.addGpsStatusListener(listener);
		
		/* 监听GPS的位置变化
		 * 这里指定2000ms或者移动距离超过4m的时候更新一次位置信息,但是
		 * 经过实际测试,更新间隔精确度极低,根本不按套路走。实际使用的话,还是采用Send Measage方式
		 */
		mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 4, locationListener);
	}
 
	/* 监听GPS的状态变化 */
	GpsStatus.Listener listener = new GpsStatus.Listener() {
		public void onGpsStatusChanged(int event) {
			switch (event) {
			/* 第一次获取到定位信息 */
			case GpsStatus.GPS_EVENT_FIRST_FIX:
				break;
			/* 卫星状态发生变化,捕获到卫星/卫星不可见 */
			case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
				break;
			case GpsStatus.GPS_EVENT_STARTED:
				break;
			case GpsStatus.GPS_EVENT_STOPPED:
				break;
			}
		};
	};
	
	private LocationListener locationListener = new LocationListener() {
		@Override
		public void onLocationChanged(Location location) {
			updateLocationMessage(location);
		}
 
		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {
			switch (status) {
			case LocationProvider.AVAILABLE:
				break;
			case LocationProvider.OUT_OF_SERVICE:
				break;
			case LocationProvider.TEMPORARILY_UNAVAILABLE:
				break;
			}
		}
 
		@Override
		public void onProviderEnabled(String provider) {
			
		}
 
		@Override
		public void onProviderDisabled(String provider) {
			
		}
 
	};
 
	private void updateLocationMessage(Location location) {
		
	}
}

上面提到的是GPS最基础的框架流程,此外它还有你想得到、想不到的其他许多用法与功能。

在Android的location包中,所有与定位相关的类和接口如下:

在这里插入图片描述


http://www.niftyadmin.cn/n/2828928.html

相关文章

怎么把照片做成消消乐_开心消消乐特效制作如何快速的消除过关

开心消消乐特效制作如何快速的消除过关。在闯关的时候,我们想要制作三星过关,特效的制作是我们必须的过程。如果没有特效帮助我们大量的消除,想要得到3星的分数是比较困难的。但是在释放特效的时候,我们是需要一定的技巧的。单独的…

debian卸载php_在 Ubuntu/Debian 下安装 PHP7.3 教程

介绍最近的 PHP 7.3.0 已经在 2018 年12月6日 发布 GA,大家已经可以开始第一时间体验新版本了,这里先放出 PHP7.3 安装的教程以便大家升级。适用系统: Ubuntu 18.04 LTS / Ubuntu 16.04 LTS / Ubuntu 14.04 LTS / Debian 9 stretc…

图解C/C++中函数参数的值传递、指针传递与引用传递

因为一直对这几种函数参数的传递方式理解的不是很透彻,花了一段时间仔细捋清了他们之间的区别。这个问题也是编程初级阶段会经常遇到的问题,也是有可能在面试中遇到的基本问题,在此进行了简单的总结一下,一是加深自己的理解&#…

Scenario 6 –HP C7000 Virtual Connect FlexFabric SUS with A/A Uplinks, 8

概述:HP c7000 VC FlexFabric SUS配置为Active/Active、LACP、FCoE、vSphere首先,创建两个SUS,名称分别是VLAN-Trunk-1和VLAN-Trunk-2。VLAN-Trunk-1共有2个uplink Port( Bay1-VC的x5、x6),VLAN-Trunk-2共有…

android github 评分控件_GitHub - wolongalick/PercentRatingBar: 百分比评分控件

PercentRatingBar百分比评分控件依赖方式buildscript {repositories {google()jcenter()}}dependencies {implementation com.wolongalick.widget:PercentRatingBar:1.0.1}快速使用android:layout_width"wrap_content"android:layout_height"wrap_content"…

64位win2008下IIS未开启32位支持导致DLL无法加载问题

部署一个WEB项目,在本机、本地服务器都没有问题,但部署到远程服务器以后,提示有个DLL无法加载:Server Error in / Application.Could not load file or assembly Common.Component.Repository or one of its dependencies. An att…

SparkSQL DataFrames操作

Hive中已经存在emp和dept表: select * from emp; ---------------------------------------------------------------------------- | empno | ename | job | mgr | hiredate | sal | comm | deptno | ------------------------------------…