GPS是Global Positioning System(全球定位系统)的简称,它的作用就是为全球的物体提供定位功能。GPS定位是一门高新技术,但对于Android程序员来说,开发GPS功能的应用程序又十分简单,Android为此提供LocationManager类及其他几个辅助类,开发人员可以非常方便地开发出GPS应用。在程序中,通过getSystemService获得LocationManager对象之后,就可以调用LocationManager提供的常用方法:

在上面方法中涉及另一个重要的类:LocationProvider(定位提供者),就是GPS定位组件的抽象表示,它提供了如下方法来获取定位组件的相关信息:

另外,GPS支持还涉及到另一个类:Location,它是一个代表位置信息的抽象类,它提供如下方法来获取定位信息:

另外,在获取LocationProvider时,往往需要加上过滤条件,即Criteria,Criteria提供如下方法来设置过滤条件:

使用上面三个类及其提供的方法就可以获取GPS定位信息了,步骤如下:
1、获取系统的LocationManager对象。
2、使用LocationManager,通过指定LocationProvider来获取定位信息,定位信息由对象Location表示。
3、从Location对象中获取定位信息。

下面用一个简单的示例来演示,根据不同方式获取LocationProvider定位信息,代码如下:

Activity:

  1. package com.home.locationprovider;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import android.app.Activity;
  7. import android.content.Context;
  8. import android.location.Criteria;
  9. import android.location.LocationManager;
  10. import android.os.Bundle;
  11. import android.view.View;
  12. import android.widget.ArrayAdapter;
  13. import android.widget.ListView;
  14.  
  15. public class LocationProviderTestActivity extends Activity {
  16. private ListView listView;
  17. private LocationManager locationManager;
  18. // 存放LocationProvider名称的集合
  19. private List<String> providerNames = new ArrayList<String>();
  20. private ArrayAdapter<String> adapter;
  21.  
  22. @Override
  23. protected void onCreate(Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.main);
  26. listView = (ListView) findViewById(R.id.main_lv_show);
  27. // 获取系统的LocationManager对象
  28. locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
  29. }
  30.  
  31. public void click(View v) {
  32. if (v.getId() == R.id.main_btn_get_all) {
  33. // 获取系统所有的LocationProvider的名称
  34. providerNames = locationManager.getAllProviders();
  35. adapter = new ArrayAdapter<String>(this,
  36. android.R.layout.simple_list_item_1, providerNames);
  37. listView.setAdapter(adapter);
  38. }
  39. if (v.getId() == R.id.main_btn_get_criteria) {
  40. // 创建一个LocationProvider的过滤条件
  41. Criteria criteria = new Criteria();
  42. // 设置要求LocationProvider必须使免费的
  43. criteria.setCostAllowed(false);
  44. // 设置要求LocationProvider能提供高度信息
  45. criteria.setAltitudeRequired(true);
  46. // 设置要求LocationProvider能提供方向信息
  47. criteria.setBearingRequired(true);
  48. // 获取系统所有符合条件的LocationProvider的名称
  49. providerNames = locationManager.getProviders(criteria, true);
  50. adapter = new ArrayAdapter<String>(this,
  51. android.R.layout.simple_list_item_1, providerNames);
  52. listView.setAdapter(adapter);
  53. }
  54. if (v.getId() == R.id.main_btn_get_byname) {
  55. providerNames.clear();
  56. // 根据名称获取指定的LocationProvider的名称
  57. providerNames.add(locationManager.getProvider(
  58. LocationManager.GPS_PROVIDER).getName());
  59. adapter = new ArrayAdapter<String>(this,
  60. android.R.layout.simple_list_item_1, providerNames);
  61. listView.setAdapter(adapter);
  62. }
  63. }
  64. }

布局XML:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:orientation="vertical" >
  5.  
  6. <Button
  7. android:id="@+id/main_btn_get_all"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:onClick="click"
  11. android:text="获取所有LocationProvider" />
  12.  
  13. <Button
  14. android:id="@+id/main_btn_get_criteria"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:onClick="click"
  18. android:text="根据条件获取LocationProvider" />
  19.  
  20. <Button
  21. android:id="@+id/main_btn_get_byname"
  22. android:layout_width="wrap_content"
  23. android:layout_height="wrap_content"
  24. android:onClick="click"
  25. android:text="获取指定的LocationProvider" />
  26.  
  27. <ListView
  28. android:id="@+id/main_lv_show"
  29. android:layout_width="match_parent"
  30. android:layout_height="wrap_content" />
  31.  
  32. </LinearLayout>

权限:

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

附上图片效果:

Android中GPS简介及其应用的更多相关文章

  1. Android中GPS定位的简单应用

    在Android中通过GPS获得当前位置,首先要获得一个LocationManager实例,通过该实例的getLastKnownLocation()方法获得第一个的位置,该方法的说明如下: void ...

  2. Android中GPS类及方法简介

    GPS是Global Positioning System(全球定位系统)的简称,它的作用就是为全球的物体提供定位功能.GPS定位是一门高新技术,但对于Android程序员来说,开发GPS功能的应用程 ...

  3. Android中如何监听GPS开启和关闭

    转自 chenming 原文 Android中如何监听GPS开启和关闭   摘要: 本文简单总结了如何监听GPS开关的小技巧 有时需要监听GPS的开关(这种需求并不多见).实现的思路是监听代表 GPS ...

  4. Android中的 init.rc文件简介

    init.rc脚本是由Android中linux的第一个用户级进程init进行解析的. init.rc 文件并不是普通的配置文件,而是由一种被称为"Android初始化语言"(An ...

  5. android中SELINUX规则分析和语法简介【转】

    本文转载自:https://blog.csdn.net/LoongEmbedded/article/details/62430039 1. SELINUX是可以理解为一种Android上面的安全机制, ...

  6. Android中SELinux的TE简介【转】

    转自:https://blog.csdn.net/murphykwu/article/details/52457667 selinux的概念如上一篇链接所示: http://www.cnblogs.c ...

  7. Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别

    XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...

  8. android中SELINUX规则分析和语法简介

    1. SELINUX是可以理解为一种android上面的安全机制,是有美国国家安全局和一些公司设计的一个针对linux的安全加强系统我们可以通过配置SELINUX的相关policy,来定制自己的手机的 ...

  9. Android中后台的劳动者“服务”

    前言 作为四大组件之一的Service,想必不少开发者都是了解的,那具体熟悉吗?是不是对Service中的每个知识点是否了解,它与Activity的关系又是什么样的,我们所理解的后台服务跟Servic ...

随机推荐

  1. HBase API详解

    一.Java API和HBase数据模型的关系 在Java中,与HBase数据库存储管理相关的类包括HBaseAdmin.HBaseConfiguration.HTable.HTableDescrip ...

  2. 【转】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例

    由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socket通讯 ...

  3. 项目需要简单些了个WEB APP 的弹出窗

    var diag = { showDlg:'',//需要显示的DIV rushdiv:"<div id=v style='top:0;position: absolute;z-inde ...

  4. SQL 建表 插数据

    CREATE TABLE `article` ( `id` INT() NOT NULL PRIMARY KEY auto_increment, `title` CHAR() NOT NULL, `c ...

  5. PHP -- 添加注释

    PHP支持3种风格的注释 1.C++风格(//)的注释 这种注释不能出现?>标记,如果开启short_open和asp_tag设置,>和%>同样不能出现在注释中 <?php e ...

  6. Common Git command and mean (Windows)

    Config: git config --system git config --global git config --global merge.tool vimdiff Check config: ...

  7. Scale-up(纵向扩展) vs Scale-out(横向扩展)

    转载:http://wuaner.iteye.com/blog/1843799 http://www.javaworld.com/article/2077780/java-web-developmen ...

  8. Java图形化界面设计——布局管理器之CardLayout(卡片布局)

  9. 第八届河南省赛D.引水工程(kruthcra+prime)

    D.引水工程 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 118  Solved: 41 [Submit][Status][Web Board] D ...

  10. 飘逸的python - 用urlparse从url中抽离出想要的信息

    最近有个需求,要检测配置中的那些url的域名是否都正常,即是否都能ping通. 不过配置中url格式是这样的 http://www.something.com:1234/ . 要ping的是www.s ...