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
分享到:
相关推荐
《ICD-GPS-200C.rar》是一款与GPS技术相关的资源,主要面向GPS开发者,包含了一份重要的接口控制文档——ICD(Interface Control Document)GPS。ICD文档是GPS系统设计和开发中的核心参考资料,它详细定义了系统组件...
在IT行业中,GPS(全球定位系统)和时间同步是至关重要的元素,特别是在各种导航、通信和数据记录系统中。GPS时间以"GPS周秒"的形式给出,而我们日常生活中的时间通常是以协调世界时(UTC)表示。理解如何将GPS周秒...
这个压缩包“gps-matlab-code.zip”包含了一套完整的MATLAB代码,用于生成GPS信号并模拟不同类型的干扰,这对于理解GPS系统的工作原理、研究信号处理算法以及优化抗干扰能力具有重要意义。 1. GPS信号生成: GPS...
"android_hardware_gps GPS驱动"是指专为Android设备设计的GPS(全球定位系统)硬件抽象层,它负责管理和控制GPS芯片,以提供定位、导航和时间同步等服务。本驱动是针对全志处理器平台,并且已经过Android 10版本的...
标题中的“GPS定位功能”指的是全球定位系统(Global Positioning System)在移动设备上的应用,如智能手机。GPS技术通过接收多个卫星的信号来确定设备的精确地理位置,包括经度、纬度和海拔高度。在描述中提到的...
在ROS(Robot Operating System)框架下,`gps_goal`是一个重要的模块,主要用于机器人导航系统中设置基于GPS坐标的目标位置。标题“gps_goal-master_gps_goal_UsingGPS_”暗示了我们正在探讨一个关于如何利用GPS...
标题中的“GPS 车载GPS GPS定位 物流GPS 苏州GPS”明确指出了本文将探讨的主要焦点——GPS技术在车载导航、物流管理和苏州地区服务中的应用。描述部分进一步细化了这一主题,提到了“GPS车辆定位监控系统”和“物流...
GPS时间系统是全球定位系统(Global Positioning System)所使用的时间标准,它是一个绝对时间参考,与国际协调时间(UTC)同步,但不包含闰秒。GPS时间自1980年1月6日零时起算,每过一周(大约7天)就会增加一整数...
标题中的“GPS.rar_GPS_GPS 提取_GPS解析”表明这是一个关于全球定位系统(GPS)的压缩文件,其中包含的内容主要涉及GPS数据的提取和解析过程,可能是一个使用C语言编写的程序示例。从标签“gps gps_提取 gps解析”...
GPS仿真软件和GPS模拟器是IT领域中用于测试和开发全球定位系统(GPS)相关应用的重要工具。NMEA0183仿真软件则是这类工具的一个关键组成部分,它主要用于模拟GPS接收器输出的数据格式。NMEA0183是全球导航卫星系统...
### GPS漂移的处理算法详解 #### 引言 在当今全球定位系统(GPS)广泛应用的时代,无论是导航、定位还是时间同步,GPS都扮演着至关重要的角色。然而,由于多种因素的影响,GPS信号可能会出现误差,其中一种常见的...
在Android系统中,Ublox GPS驱动扮演着至关重要的角色,它是连接硬件GPS模块与操作系统之间的桥梁,使得设备能够接收并处理卫星信号,提供精确的位置信息。本文将深入探讨Android Ublox GPS驱动的相关知识点,包括其...
STM32解析GPS数据主要涉及的是嵌入式系统中的硬件接口设计、协议处理以及数据解析技术。STM32是一款基于ARM Cortex-M内核的微控制器,广泛应用在各种嵌入式项目中,包括GPS数据处理。以下将详细阐述相关知识点。 1....
Matlab GPS Toolbox是一款专为处理全球定位系统(GPS)数据而设计的软件工具箱,它在Matlab环境中提供了丰富的函数和脚本,用于GPS基线解算、数据分析、图形绘制等任务。这款工具箱尤其对地学研究者和工程师极具价值...
标题中的“gps.rar”是一个压缩文件,通常包含多个与GPS(全球定位系统)相关的文件。在本案例中,这个压缩包特别关注车载GPS系统,它是一种利用GPS技术为汽车导航的设备。车载GPS可以帮助驾驶员确定车辆的位置、...
在"ros_gps2bluetooth"项目中,其核心功能是实现从智能手机获取GPS数据并通过蓝牙将其传输到计算机上。这在机器人系统中非常有用,因为手机GPS模块通常比嵌入式计算机或机器人平台上的GPS接收器更便宜且易于获取。 ...
在Windows操作系统中,进行GPS(全球定位系统)测试与数据分析是一项重要的任务,尤其对于开发者、地理信息系统(GIS)专业人士和户外活动爱好者来说。本篇文章将详细介绍三款在Windows环境下常用的GPS测试工具:...
在Android平台上,GPS(全球定位系统)定位是开发者常用的功能之一,用于获取设备的精确位置信息。本资源提供了Android GPS定位的实例源码,对于学习和理解如何在Android应用中集成GPS定位至关重要。通过分析这些...
在Android系统中,GPS(全球定位系统)是用于获取设备位置信息的重要组件。通常,当一个应用程序需要使用GPS时,它会通过系统UI提示用户授权访问地理位置。然而,有些开发者可能需要在没有用户交互的情况下强制开启...
Virace GPS Simulator 用软件模拟GPS接收器输出的GPS语句,通过串行口输出到GPS应用软件。用鼠标或键盘控制Virace而模拟实际GPS接收器的运动,或者重播已有的GPS航迹文件,从而在室内测试GPS导航软件等。 Virace...