入门资料参考:

How accurate is Android GPS? Part 1: Understanding Location Data

How accurate is Android GPS? Part 2 – Consuming real-time locations

Google Developer docs – Location Strategies

Android blog – Deep dive into location

GPS Testing Tool (open source)

HTML5 Geolocation API – How accurate is it, really?

测试demo工程:

GpsActivty.java

public class GpsActivity extends Activity {private EditText editText;private TextView logText;private LocationManager lm;private static final String TAG="GpsActivity";@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();lm.removeUpdates(locationListener);}private void setLog(String txt){printTime();setLogInfo(txt);}private void setLogInfo(String txt){logText.setText(txt+"\n"+"--------------------\n"+logText.getText());}private void printTime(){Calendar ca = Calendar.getInstance();int year = ca.get(Calendar.YEAR);//获取年份int month=ca.get(Calendar.MONTH);//获取月份 int day=ca.get(Calendar.DATE);//获取日int minute=ca.get(Calendar.MINUTE);//分 int hour=ca.get(Calendar.HOUR);//小时 int second=ca.get(Calendar.SECOND);//秒int WeekOfYear = ca.get(Calendar.DAY_OF_WEEK); setLogInfo("当前日期:" + year +"年"+ month +"月"+ day + "日");setLogInfo(">>>" + hour +"时"+ minute +"分"+ second +"秒");}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.gps_demo);editText=(EditText)findViewById(R.id.editText);logText=(TextView) this.findViewById(R.id.logText);lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);//判断GPS是否正常启动if(!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)){Toast.makeText(this, "请开启GPS导航...", Toast.LENGTH_SHORT).show();setLog("请开启GPS导航...");//返回开启GPS导航设置界面Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);   startActivityForResult(intent,0); return;}//为获取地理位置信息时设置查询条件String bestProvider = lm.getBestProvider(getCriteria(), true);//获取位置信息//如果不设置查询要求,getLastKnownLocation方法传人的参数为LocationManager.GPS_PROVIDERLocation location= lm.getLastKnownLocation(bestProvider);    updateView(location);//监听状态lm.addGpsStatusListener(listener);//绑定监听,有4个参数    //参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种//参数2,位置信息更新周期,单位毫秒    //参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息    //参数4,监听    //备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新   // 1秒更新一次,或最小位移变化超过1米更新一次;//注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);然后执行handler.sendMessage(),更新位置lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, locationListener);}//位置监听private LocationListener locationListener=new LocationListener() {/*** 位置信息变化时触发*/public void onLocationChanged(Location location) {updateView(location);Log.i(TAG, "时间:"+location.getTime()); Log.i(TAG, "经度:"+location.getLongitude()); Log.i(TAG, "纬度:"+location.getLatitude()); Log.i(TAG, "海拔:"+location.getAltitude()); setLog( "时间:"+location.getTime());setLog( "经度:"+location.getLongitude());setLog( "纬度:"+location.getLatitude());setLog( "海拔:"+location.getAltitude());}/*** GPS状态变化时触发*/public void onStatusChanged(String provider, int status, Bundle extras) {switch (status) {//GPS状态为可见时case LocationProvider.AVAILABLE:Log.i(TAG, "当前GPS状态为可见状态");setLog("当前GPS状态为可见状态");break;//GPS状态为服务区外时case LocationProvider.OUT_OF_SERVICE:Log.i(TAG, "当前GPS状态为服务区外状态");setLog("当前GPS状态为服务区外状态");break;//GPS状态为暂停服务时case LocationProvider.TEMPORARILY_UNAVAILABLE:Log.i(TAG, "当前GPS状态为暂停服务状态");setLog("当前GPS状态为暂停服务状态");break;}}/*** GPS开启时触发*/public void onProviderEnabled(String provider) {Location location=lm.getLastKnownLocation(provider);updateView(location);}/*** GPS禁用时触发*/public void onProviderDisabled(String provider) {updateView(null);}};//状态监听GpsStatus.Listener listener = new GpsStatus.Listener() {public void onGpsStatusChanged(int event) {switch (event) {//第一次定位case GpsStatus.GPS_EVENT_FIRST_FIX:Log.i(TAG, "第一次定位");setLog("第一次定位");break;//卫星状态改变case GpsStatus.GPS_EVENT_SATELLITE_STATUS:Log.i(TAG, "卫星状态改变");setLog("卫星状态改变");//获取当前状态GpsStatus gpsStatus=lm.getGpsStatus(null);//获取卫星颗数的默认最大值int maxSatellites = gpsStatus.getMaxSatellites();//创建一个迭代器保存所有卫星 Iterator<GpsSatellite> iters = gpsStatus.getSatellites().iterator();int count = 0;     while (iters.hasNext() && count <= maxSatellites) {     GpsSatellite s = iters.next();     count++;     }   System.out.println("搜索到:"+count+"颗卫星");setLog("搜索到:"+count+"颗卫星");break;//定位启动case GpsStatus.GPS_EVENT_STARTED:Log.i(TAG, "定位启动");setLog("定位启动");break;//定位结束case GpsStatus.GPS_EVENT_STOPPED:Log.i(TAG, "定位结束");setLog("定位结束");break;}};};/*** 实时更新文本内容* * @param location*/private void updateView(Location location){if(location!=null){editText.setText("设备位置信息\n\n经度:");editText.append(String.valueOf(location.getLongitude()));editText.append("\n纬度:");editText.append(String.valueOf(location.getLatitude()));}else{//清空EditText对象editText.getEditableText().clear();}}/*** 返回查询条件* @return*/private Criteria getCriteria(){Criteria criteria=new Criteria();//设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细 criteria.setAccuracy(Criteria.ACCURACY_FINE);    //设置是否要求速度criteria.setSpeedRequired(false);// 设置是否允许运营商收费  criteria.setCostAllowed(false);//设置是否需要方位信息criteria.setBearingRequired(false);//设置是否需要海拔信息criteria.setAltitudeRequired(false);// 设置对电源的需求  criteria.setPowerRequirement(Criteria.POWER_LOW);return criteria;}
}

然后在layout目录创建 gps_demo.xml

<?xml version="1.0" encoding="utf-8"?><ScrollViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><EditText android:layout_width="fill_parent"android:layout_height="wrap_content"android:cursorVisible="false"android:editable="false"android:id="@+id/editText"/><TextView android:layout_width="fill_parent"android:layout_height="wrap_content"android:minHeight="300dp"android:id="@+id/logText"/></LinearLayout></ScrollView>

最后在AndroidManifest.xml里添加需要的权限

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

手机运行的效果图

注意事项:

1、室内是无法检测到GPS信号的,如果你获得了经纬度,那也是最后一次手机缓存的GPS记录。

2、你获得gps偏移量大的问题,请参照 关于GPS偏移的基础知识

android gps开发必备资料(含测试demo下载)相关推荐

  1. android 建立工程文件,Android 项目开发必备-建立属于你的build.gradle文件

    timg (1).jpg 开发一个Android项目不仅仅需要你会写java/kotlin代码,而且你还要了解各种配置文件.例如.AndroidManifest.xml,混淆文件,build.grad ...

  2. [渝粤教育] 苏州市职业大学 Android应用开发 参考 资料

    教育 -Android应用开发-章节资料考试资料-苏州市职业大学[] Android基础 1.[单选题]Android底层是基于什么操作系统 A.Java B.Mac OS C.Windows D.L ...

  3. 经纬度绘图_【知识科普】地形图图例汇总,测绘人识图绘图必备(含dwg版下载)...

    地形图(topographic map)指的是地表起伏形态和地理位置.形状在水平面上的投影图.具体来讲,将地面上的地物和地貌按水平投影的方法(沿铅垂线方向投影到水平面上),并按一定的比例尺缩绘到图纸上 ...

  4. 音视频开发——概述(含TUTK demo iOS)

    开发一款播放器,难不难,要怎么做?想必每个进入到音视频领域的新人都有这样的疑问. 如果仅仅是完成项目,可以说很简单.对于iOS开发人员,网上有不少的开源播放器,如kxmovie.ikjplayer,g ...

  5. Android 数据库开发实战(简单易懂+DEMO)

    Android数据库开发实战 我们在Android开发中,如果需要本地持久化数据,可以采用SP.数据库.本地文件等方式.SP适合小数据的存取.数据库查询修改方面非常适合.文件存储适合大数据文件的操作. ...

  6. Android 游戏开发必备的基础知识

    Android游戏开发: View类开发框架 SurfaceView开发框架 Graphics类开发框架 Paint与Color类介绍 Canvas介绍 几何图形绘制 字符串绘制 图像的绘制 图像的旋 ...

  7. Android 平台最新资讯(《Google android 入门开发与实战》pdf完整下载)

    推荐最新学习Android平台网址:[url]http://www.eoeandroid.com[/url] 最新学习<Google android 入门开发与实战>: [url]http ...

  8. android studio开发环境搭建,国内服务器代理下载android sdk

    android studio开发环境搭建 1,百度android studio,下载安装: 2,启动Fetching Android SDK component information http:// ...

  9. android 软件开发 小米 魅族 htc 测试中的问题,小米万能遥控器app使用问题及解决办法...

    问: 万能遥控app真的是什么都能控制么? 答: 可以控制绝大多数的红外遥控电器,比如电视,空调,机顶盒等等.如果电器本身不是通过红外遥控的,而是通过无线方式遥控的,就无法支持.比如玩具汽车,一些蓝牙 ...

  10. Android应用开发必备的20条技能清单

    有些andorid开发人员感觉很迷茫,接下来该去看系统源码还是继续做应用,但是感觉每天仅仅实在画UI和调用MobileAPI处理JSON,没有技术上升的空间.下面是包建强老师的<APP研发录&g ...

最新文章

  1. hyperledge工具-cryptogen
  2. Master PDF Editor中文版
  3. activiti 5.21工作流规则引擎扩展(businessRuleTask)
  4. 【Redis】9.10.Redis持久化方式之RDBAOFAOF和RDB区别场景分析
  5. java入门第二天课程,Java菜鸟培训第二天
  6. boost::date_time时间类的使用
  7. 4-1 :input表单选择器 jQuery第四章 很关键 好像 刚好可以解决 微信自动回复...
  8. GO语言环境搭建 及 helloworld开发
  9. CGAffineTransformMakeRotation 实现旋转
  10. 声压级和灵敏度的关系
  11. 单片机c语言编程实训心得,单片机实训心得体会
  12. 随着公网对讲机市场占有率得不断增长,部分对讲机厂家为了得到用户的认可,不断升级对讲机及时以及对讲机的功能和性能,因此越来越多的全国对讲机以及公网对讲机问世。但是某些用户不清楚对讲机的原理,不禁会问
  13. 如何用Python计算股票的Beta系数
  14. php微信昵称保存,附件十四 存储微信昵称的处理方法
  15. 鸿蒙系统sp3什么意思,XP系统的那个SP3是什么意思?
  16. python用两分钟告诉你,怎样暴力破解隔壁老王的 WiFi 密码
  17. 力扣 LCP 42. 玩具套圈 (数学公式反推)
  18. pip命令大全 含换源方法
  19. int const, const int *,int *const,int const *const 区别
  20. CentOS Redis安装报错:“You need tcl 8.5 or newer in order to run the Redis test”问题解决

热门文章

  1. 怎么使用计算机扩展,如何导入扩展到慧编程PC并进行使用
  2. 2021深圳杯数学建模D题
  3. Java基础之类加载器
  4. List集合去重的三种方法
  5. Python内存映射文件读写
  6. 操作系统 | 内存文件映射 —— 文件到内存的映射
  7. 计算IO设备、CPU利用率
  8. 以太网帧分析与IP报文结构分析(二)
  9. 【Python古诗词鉴赏小程序】千古绝唱,精选中国最美古诗句,经典咏流传~
  10. HTML特效文字代码大全