`

GPS

    博客分类:
  • GPS
 
阅读更多


 

public class Main extends Activity implements OnClickListener {
	private LocationManager locationManager;
	private Location location;
	private Criteria criteria;
	private String provider;

	private TextView tv_Latitude;// 纬度
	private TextView tv_Longitude;// 经度
	private TextView tv_High;// 海拔
	private TextView tv_Direction;// 方向
	private TextView tv_Speed;// 速度
	private TextView tv_GpsTime;// 获取的时间
	private TextView tv_InfoType;// 信息的来源
	private EditText et_SetTimeSpace;// 设置时间间隔

	private Button manual_btn;
	private Button settimespace_btn;
	private Button exit_btn;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		setTitle("GPS");
		// 隐藏输入法
		getWindow().setSoftInputMode(
				WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
		initView();
		initLocation();
	}

	// 初始化
	@SuppressWarnings("static-access")
	private void initLocation() {
		// 初始化locationManager:获得系统所提供的location_service
		locationManager = (LocationManager) getSystemService(this.LOCATION_SERVICE);
		/**
		 * LocationManager.GPS_PROVIDER
		 * 
		 * 精度比较高,但是慢而且消耗电力, 而且可能因为天气原因或者障碍物而无法获取卫星信息,另外设备可能没有GPS模块;
		 * LocationManager.NETWORK_PROVIDER
		 * 
		 * 通过网络获取定位信息,精度低,耗电少,获取信息速度较快,不依赖GPS模块。
		 */
		if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
			/* 注意:criteria有多种设置 */

			// 第一种:criteria
			criteria = new Criteria();
			criteria.setAccuracy(Criteria.ACCURACY_FINE);// 高精度
			criteria.setAltitudeRequired(true);// 显示海拔
			criteria.setBearingRequired(true);// 显示方向
			criteria.setSpeedRequired(true);// 显示速度
			criteria.setCostAllowed(false);// 不允许有花费
			criteria.setPowerRequirement(Criteria.POWER_LOW);// 低功耗

			// 第二种:criteria
			// criteria = new Criteria();
			// criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置为最大精度
			// criteria.setAltitudeRequired(false);//不要求海拔信息
			// criteria.setBearingRequired(false);//不要求方位信息
			// criteria.setCostAllowed(true);//是否允许付费
			// criteria.setPowerRequirement(Criteria.POWER_LOW);//对电量的要求

			provider = locationManager.getBestProvider(criteria, true);

			locationManager.requestLocationUpdates(provider, 5000, 10,
					locationListener);// 位置变化监听,默认5秒一次,距离10米以上
		} else
			showInfo(null, -1);
	}

	/**
	 * 获取GPS相应的数据
	 * 
	 * @return
	 */
	private GPSModel getLastPosition() {
		GPSModel gpsModel = new GPSModel();
		location = locationManager.getLastKnownLocation(provider);
		if (location != null) {
			gpsModel.Latitude = (double) (location.getLatitude());
			gpsModel.Longitude = (double) (location.getLongitude());
			gpsModel.High = location.getAltitude();
			gpsModel.Direct = location.getBearing();
			gpsModel.Speed = location.getSpeed();

			Date d = new Date();
			d.setTime(location.getTime());
			gpsModel.GpsTime = DateFormat.format("yyyy-MM-dd kk:mm:ss", d)
					.toString();
			d = null;
		}
		return gpsModel;
	}

	// 显示信息
	private void showInfo(GPSModel gpsModel, int infotype) {
		if (gpsModel == null) {
			if (infotype == -1) {
				tv_Latitude.setText("GPS功能已关闭");
				tv_Longitude.setText("");
				tv_High.setText("");
				tv_Direction.setText("");
				tv_Speed.setText("");
				tv_GpsTime.setText("");
				tv_InfoType.setText("");
				manual_btn.setEnabled(false);
				settimespace_btn.setEnabled(false);
				et_SetTimeSpace.setEnabled(false);
			}
		} else {
			double y = gpsModel.Latitude;// 纬度
			double x = gpsModel.Longitude;// 经度
			tv_Latitude.setText("纬度:y=" + String.valueOf(y));
			tv_Longitude.setText("经度:x=" + String.valueOf(x));
			tv_High.setText(String.format("海拔:%f", gpsModel.High));
			tv_Direction.setText(String.format("方向:%f", gpsModel.Direct));
			tv_Speed.setText(String.format("速度:%f", gpsModel.Speed));
			tv_GpsTime.setText(String.format("GPS时间:%s", gpsModel.GpsTime));

			gpsModel.InfoType = infotype;
			switch (infotype) {
			case 1:
				tv_InfoType.setText("信息来源状态:手动获取更新");
				break;
			case 2:
				tv_InfoType.setText("信息来源状态:位置改变更新");
				break;
			}
		}

	}

	@SuppressWarnings("static-access")
	@Override
	public void onClick(View v) {
		if (v.equals(manual_btn)) {
			showInfo(getLastPosition(), 1);
		}
		if (v.equals(settimespace_btn)) {
			if (TextUtils.isEmpty(et_SetTimeSpace.getText().toString())) {
				Toast.makeText(this, "请输入更新时间间隔", Toast.LENGTH_LONG).show();
				et_SetTimeSpace.requestFocus();
				return;
			}

			int timespace = Integer.valueOf(et_SetTimeSpace.getText()
					.toString()) * 1000;
			if (locationManager.isProviderEnabled(locationManager.GPS_PROVIDER))
				locationManager.requestLocationUpdates(provider, timespace, 10,
						locationListener);
		}
		if (v.equals(exit_btn))
			android.os.Process.killProcess(android.os.Process.myPid());
	}

	private final LocationListener locationListener = new LocationListener() {

		@Override
		public void onLocationChanged(Location arg0) {
			showInfo(getLastPosition(), 2);
		}

		@Override
		public void onProviderDisabled(String arg0) {
			showInfo(null, -1);
		}

		@Override
		public void onProviderEnabled(String arg0) {
		}

		@Override
		public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
		}

	};

	private void initView() {
		tv_Latitude = (TextView) findViewById(R.id.tvlatitude);
		tv_Longitude = (TextView) findViewById(R.id.tvlongitude);
		tv_High = (TextView) findViewById(R.id.tvhigh);
		tv_Direction = (TextView) findViewById(R.id.tvdirection);
		tv_Speed = (TextView) findViewById(R.id.tvspeed);
		tv_GpsTime = (TextView) findViewById(R.id.tvgpstime);
		tv_InfoType = (TextView) findViewById(R.id.tvinfotype);
		et_SetTimeSpace = (EditText) findViewById(R.id.ettimespace);

		manual_btn = (Button) findViewById(R.id.btnmanual);
		manual_btn.setOnClickListener(this);
		settimespace_btn = (Button) findViewById(R.id.btnsettimespace);
		settimespace_btn.setOnClickListener(this);
		exit_btn = (Button) findViewById(R.id.btnexit);
		exit_btn.setOnClickListener(this);
	}

}

 
 

  • 大小: 33.2 KB
  • GPS.zip (61.7 KB)
  • 下载次数: 23
分享到:
评论

相关推荐

    ICD-GPS-200C.rar_ICD GPS_ICD-GPS 下载_icd-180_icd-gps-200c_icd-gps

    《ICD-GPS-200C.rar》是一款与GPS技术相关的资源,主要面向GPS开发者,包含了一份重要的接口控制文档——ICD(Interface Control Document)GPS。ICD文档是GPS系统设计和开发中的核心参考资料,它详细定义了系统组件...

    DMY.zip_DMY_GPS 秒 UTC转换_GPS周秒 UTC_GPS周秒转换_GPS转换UTC

    在IT行业中,GPS(全球定位系统)和时间同步是至关重要的元素,特别是在各种导航、通信和数据记录系统中。GPS时间以"GPS周秒"的形式给出,而我们日常生活中的时间通常是以协调世界时(UTC)表示。理解如何将GPS周秒...

    gps-matlab-code.zip_GPS信号生成_GPS宽带干扰_GPS干扰_单频信号 gps_卫星干扰

    这个压缩包“gps-matlab-code.zip”包含了一套完整的MATLAB代码,用于生成GPS信号并模拟不同类型的干扰,这对于理解GPS系统的工作原理、研究信号处理算法以及优化抗干扰能力具有重要意义。 1. GPS信号生成: GPS...

    android_hardware_gps GPS驱动

    "android_hardware_gps GPS驱动"是指专为Android设备设计的GPS(全球定位系统)硬件抽象层,它负责管理和控制GPS芯片,以提供定位、导航和时间同步等服务。本驱动是针对全志处理器平台,并且已经过Android 10版本的...

    GPS定位功能。GPS定位例子。

    标题中的“GPS定位功能”指的是全球定位系统(Global Positioning System)在移动设备上的应用,如智能手机。GPS技术通过接收多个卫星的信号来确定设备的精确地理位置,包括经度、纬度和海拔高度。在描述中提到的...

    gps_goal-master_gps_goal_UsingGPS_

    在ROS(Robot Operating System)框架下,`gps_goal`是一个重要的模块,主要用于机器人导航系统中设置基于GPS坐标的目标位置。标题“gps_goal-master_gps_goal_UsingGPS_”暗示了我们正在探讨一个关于如何利用GPS...

    GPS 车载GPS GPS定位 物流GPS 苏州GPS

    标题中的“GPS 车载GPS GPS定位 物流GPS 苏州GPS”明确指出了本文将探讨的主要焦点——GPS技术在车载导航、物流管理和苏州地区服务中的应用。描述部分进一步细化了这一主题,提到了“GPS车辆定位监控系统”和“物流...

    gps周 + 周内秒时间转换成 GPS 时间戳(单位:秒)

    GPS时间系统是全球定位系统(Global Positioning System)所使用的时间标准,它是一个绝对时间参考,与国际协调时间(UTC)同步,但不包含闰秒。GPS时间自1980年1月6日零时起算,每过一周(大约7天)就会增加一整数...

    GPS.rar_GPS_GPS 提取_GPS解析

    标题中的“GPS.rar_GPS_GPS 提取_GPS解析”表明这是一个关于全球定位系统(GPS)的压缩文件,其中包含的内容主要涉及GPS数据的提取和解析过程,可能是一个使用C语言编写的程序示例。从标签“gps gps_提取 gps解析”...

    GPS仿真软件 gps模拟器 NMEA0183仿真软件

    GPS仿真软件和GPS模拟器是IT领域中用于测试和开发全球定位系统(GPS)相关应用的重要工具。NMEA0183仿真软件则是这类工具的一个关键组成部分,它主要用于模拟GPS接收器输出的数据格式。NMEA0183是全球导航卫星系统...

    GPS漂移的处理算法

    ### GPS漂移的处理算法详解 #### 引言 在当今全球定位系统(GPS)广泛应用的时代,无论是导航、定位还是时间同步,GPS都扮演着至关重要的角色。然而,由于多种因素的影响,GPS信号可能会出现误差,其中一种常见的...

    Android Ublox GPS 驱动

    在Android系统中,Ublox GPS驱动扮演着至关重要的角色,它是连接硬件GPS模块与操作系统之间的桥梁,使得设备能够接收并处理卫星信号,提供精确的位置信息。本文将深入探讨Android Ublox GPS驱动的相关知识点,包括其...

    STM32解析GPS数据

    STM32解析GPS数据主要涉及的是嵌入式系统中的硬件接口设计、协议处理以及数据解析技术。STM32是一款基于ARM Cortex-M内核的微控制器,广泛应用在各种嵌入式项目中,包括GPS数据处理。以下将详细阐述相关知识点。 1....

    Matlab GPS Toolbox.rar

    Matlab GPS Toolbox是一款专为处理全球定位系统(GPS)数据而设计的软件工具箱,它在Matlab环境中提供了丰富的函数和脚本,用于GPS基线解算、数据分析、图形绘制等任务。这款工具箱尤其对地学研究者和工程师极具价值...

    gps.rar_GPS 地图_GPS地图_车载GPS

    标题中的“gps.rar”是一个压缩文件,通常包含多个与GPS(全球定位系统)相关的文件。在本案例中,这个压缩包特别关注车载GPS系统,它是一种利用GPS技术为汽车导航的设备。车载GPS可以帮助驾驶员确定车辆的位置、...

    ros_gps2bluetooth

    在"ros_gps2bluetooth"项目中,其核心功能是实现从智能手机获取GPS数据并通过蓝牙将其传输到计算机上。这在机器人系统中非常有用,因为手机GPS模块通常比嵌入式计算机或机器人平台上的GPS接收器更便宜且易于获取。 ...

    windows下GPS测试工具

    在Windows操作系统中,进行GPS(全球定位系统)测试与数据分析是一项重要的任务,尤其对于开发者、地理信息系统(GIS)专业人士和户外活动爱好者来说。本篇文章将详细介绍三款在Windows环境下常用的GPS测试工具:...

    AndroidGPS定位源码

    在Android平台上,GPS(全球定位系统)定位是开发者常用的功能之一,用于获取设备的精确位置信息。本资源提供了Android GPS定位的实例源码,对于学习和理解如何在Android应用中集成GPS定位至关重要。通过分析这些...

    Android 强制开启GPS

    在Android系统中,GPS(全球定位系统)是用于获取设备位置信息的重要组件。通常,当一个应用程序需要使用GPS时,它会通过系统UI提示用户授权访问地理位置。然而,有些开发者可能需要在没有用户交互的情况下强制开启...

    Virace GPS Simulator V0.3.1

    Virace GPS Simulator 用软件模拟GPS接收器输出的GPS语句,通过串行口输出到GPS应用软件。用鼠标或键盘控制Virace而模拟实际GPS接收器的运动,或者重播已有的GPS航迹文件,从而在室内测试GPS导航软件等。 Virace...

Global site tag (gtag.js) - Google Analytics