这是我在CSDN里发表的第一篇博客。

我是在大学期间跟学长一起做项目时开始接触Android的。由于自己有JAVA编程的基础,以及拥有可以测试的Android手机,于是在空闲时间在图书馆阅读android方面的书籍。因为我们的项目是基于定位的,因此免不了要学习定位相关的知识。但是书上讲的内容大多都是理论上的,对于刚刚接触android的新手来说存在很多的困难。于是我求助于CSDN各位大神的博客,把代码都运行了一遍,然后编写了自己的基于GPS定位的代码。菜鸟写的代码,肯定很多不足的地方,希望大家给出意见。

现在的智能手机大多数都有GPS模块,和NETWORK相比,GPS定位更加精确(小数点后8位),并且不耗费流量。但缺点是耗电大,只能在户外有效,另外手机的GPS通常是关闭的,并且首次定位时间过长(最长的大概几分钟)。虽然这样,考虑到手机流量的问题以及精确度,我还是觉得有必要自己尝试一下。

我们所用到的核心类是这3个: android.location.LocationManager , android.location.Location , android.location.LocationListener

我们知道,LocationManager位于应用框架层,那么我们如何能够得到这个对象的实例呢?和其他系统服务一样,我们可以通过这样的一种方式得到该对象的实例:

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

首先新建一个名为GPSLOCATION的工程(Target 为 android API 8)。

工程目录结构如下:

然后修改/res/layout/main.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/msg"android:layout_width="fill_parent"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/status"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="GPS当前状态:搜索中..." /><TextViewandroid:id="@+id/tv"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="正在定位,请稍候..." /><TextViewandroid:id="@+id/help"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Hint:必须将手机移至户外,GPS不耗费流量" /></LinearLayout>

然后我们来看以下MainActivity.java文件,代码如下:

package zjut.tsw.location;import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.widget.TextView;public class MainActivity extends Activity implements LocationListener {private TextView tv, msg, status;private double longitude = 0.0;private double latitude = 0.0;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// 获得TextView对象tv = (TextView) findViewById(R.id.tv);status = (TextView) findViewById(R.id.status);msg = (TextView) findViewById(R.id.msg);// 获得LocationManager实例LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);// 如果GPS已打开if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {msg.setText("GPS开关状态:enabled");// 注册位置监听器 ,mTime = 3000ms, mDistance = 0lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3 * 1000,0, this);} else {msg.setText("GPS开关状态:disabled");tv.setText("请打开GPS!");}}@Overrideprotected void onPause() {tv.setText("正在定位,请稍候...");super.onPause();}public void onLocationChanged(Location provider) {if (provider != null) {latitude = provider.getLatitude();longitude = provider.getLongitude();tv.setText("纬度:" + latitude + "\n经度:" + longitude);}}public void onProviderDisabled(String provider) {msg.setTextColor(Color.RED);msg.setText(provider.toUpperCase() + "开关状态:disabled");}public void onProviderEnabled(String provider) {msg.setTextColor(Color.GREEN);msg.setText(provider.toUpperCase() + "开关状态:enabled");}public void onStatusChanged(String provider, int sta, Bundle extras) {if (LocationProvider.AVAILABLE == sta) {status.setTextColor(Color.GREEN);status.setText("GPS当前状态:Available");}if (LocationProvider.OUT_OF_SERVICE == sta) {status.setTextColor(Color.RED);status.setText("GPS当前状态:Out of Service");}if (LocationProvider.TEMPORARILY_UNAVAILABLE == sta) {status.setTextColor(Color.YELLOW);status.setText("GPS当前状态:Temporarily unavailable");}}}

最后,别忘了在AndroidManifest.xml中添加必要的权限 :

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

最后说明一下,第一次用GPS定位时,一般出现这样的问题,即

Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

我们可能会得到location为null。

官方文档是这样解释的:

public Location getLastKnownLocation (String provider)

Since:  API Level 1

Returns a Location indicating the data from the last known location fix obtained from the given provider. This can be done without starting the provider. Note that this location could be out-of-date, for example if the device was turned off and moved to another location.

If the provider is currently disabled, null is returned.

大概意思就是说getLastKnownLocation返回的是最后一次知道的提供者给定的地理位置,如果初次使用GPS,那么返回的就应该是空值。

另外说明的是真机测试一定要在户外,GPS一定要打开,并且需要等待一定的时间才会返回经纬度。

这里只测试GPS,没有考虑NET_WORK

真机测试过,没有问题,截图如下:(杭州)

利用GPS定位[android]相关推荐

  1. android js gps定位,Android中的定位Demo

    可以按照这上面的流程去申请key值.在获取SHA1值的时候,推荐使用给的第一种方法(在cmd命令中获取,我之前使用的是从Eclipse>  Window > Preferences > ...

  2. 基于GPS定位的嵌入式汽车监控器设计

    随着人们生活水平的提高,汽车逐渐进入了普通家庭,中国各大城市的汽车保有量逐年增加.同时,汽车被盗.被抢也成为一个较为严重的社会问题.虽然各 类汽车防盗/报警器在汽车上的应用在一定程度上解决了汽车的安全 ...

  3. 高德地图八:手机定位和GPS定位

    高德地图八:手机定位和GPS定位 高德地图八:手机定位和GPS定位 代码实现: layout/activity_main.xml <?xml version="1.0" en ...

  4. android开发GPS定位测试(附效果图和示例)【转】

    本人做了GPS相关的嵌入式软件已经几年了,所以说起要做个测试 GPS定位模块的程序,第一反应就是串口读取GPS模块的数据,然后解析GPS的NMEA格式数据 今天因为工作需要,把以前编写的一个GPS测试 ...

  5. Android APP - GPS定位并获取地理位置

    1. 相关知识简介 通过LocationManagerService可以获取位置,这个service的aidl文件在frameworks/base/location/java/android/loca ...

  6. Android系统GPS定位实现

    一.定位方式简介 定位基本分为三种方式,特点如下: 1.wifi定位:IP地址定位,根据ip地址查询实际的地理位置,因为动态获取ip的操作,定位不准确 2.基站定位:根据基站(信号塔)的个数以及手机与 ...

  7. Android GPS定位记录发送功能

    写博客分享经验,记录研发之路. 最近,要写一个GPS定位的小应用.要求很简单,能够利用Android 手机的GPS硬件模块实现定位,并能记录定位信息,并能发送给指定的邮箱或QQ-- 如下图所示:显示定 ...

  8. android 强制打开gps定位_Android判断GPS是否开启和强制帮用户打开GPS

    引子:在我们的应用为用户提供定位服务时,通常想为用户提供精确点的定位服务,这是需要用户配合的.我们必须先检测用户手机的GPS当前是否打开,若没打开则弹出对话框提示.用户若不配合我们也没办法,只能采用基 ...

  9. Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)...

    在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...

最新文章

  1. mysql 5.6 rpm 安装_mysql 5.6 rpm 包安装步骤需要注意的地方
  2. C# 如何在PDF文档中创建表格
  3. 潘正磊谈微软研发团队管理和敏捷实践学习总结
  4. sentinel接入网关应用_阿里Sentinel整合Zuul网关详解
  5. 美团开源 Logan Web:前端日志在 Web 端的实现
  6. NBMA网络帧中继交换机配置
  7. 设置应用栏(Setting Up the App Bar)
  8. [Threejs]环境光与HDR贴图
  9. 泛微OA设置系统默认水印
  10. 计算机二级大题知识点汇总,计算机二级office复习知识点「汇总」
  11. UFS SCSI Inquiry Cmd
  12. 用python进行因式分解_Python实现的质因式分解算法示例
  13. m计算机代表什么意思,计算器上的m+是什么意思
  14. SpringMVC使用Jedis发布后提示java.lang.ClassNotFoundException: redis.clients.jedis.Jedis问题
  15. 利用python制作拼图_用python做一个三阶拼图
  16. Pycharm 注册 Pycharm 破解 Pycharm 注册破解 亲测多法 仅此方有效 有效期至2099年
  17. mysql 的一个错误 Error Code: 2013. Lost connection to MySQL server during...
  18. 下沉市场三巨头,趣头条全面掉队
  19. c语言双重性,C语言双重循环应用初探
  20. 写给前端的 Docker 入门终极指南,别再说不会用 Docker 了!

热门文章

  1. Quantopian 纳斯达克Top20 市值加权
  2. 微信公众号-消息推送
  3. 卓有成效的管理者——第5章 要事优先
  4. 减少银行和金融机构的客户流失
  5. python对excel添加新的一行_python 实现在Excel末尾增加新行
  6. Typora 是什么?
  7. Excel分类汇总2个维度的结果,1个计数1个求和
  8. 【ORACLE】从安装ORACLE LINUX 8开始构建一个ORACLE21C的docker镜像
  9. 注册中心对比Zookeeper、Eureka、Nacos、Consul和Etcd
  10. airpods二代降噪吗_小白初次入手AirPods,究竟有怎样的体验呢?