Android的定位信息由LocationProvider对象来提供,该对象代表一个抽象的定位组件。在开始编程之前,需要先获得LocationProvider对象。

一、获取所有可用的LocationProvider

LocationManager提供了一个getAllProviders()方法来获取系统所有可用LocationProvider,下面的示例程序将可以列出系统所有的LocationProvider,

import java.util.List;

import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class AllProviderTest extends Activity {
  ListView providers;
  LocationManager lm;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_all_provider_test);
    providers = (ListView) findViewById(R.id.providers);
    //获取系统的LocationManager对象
    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    //获取系统所有的LocationProvider的名称
    List<String> providerNames = lm.getAllProviders();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
              android.R.layout.simple_list_item_1,providerNames);
    //使用ListView来显示所有可用的LocationProvider
    providers.setAdapter(adapter);
  }

}

二、通过名称获得指定LocationProvider

程序调用LocationManager的getAllProviders()方法获取所有LocationProvider时返回的是List<String>集合,集合元素为LocationProvider的名称,为了获取实际的LocationProvider对象,可借助于LocationManager的LocationProvider  getProvider(String  name)方法。

例如以下代码:

//获取基于GPS的LocationProvider

LocationProvider locProvider  lm.getProvider(LocationManager.GPS_PROVIDER);

三、根据Criteria获取LocationProvider

前面的程序调用LocationManager的getAllProviders()方法返回了系统所有可用的LocationProvider,但大部分时候,应用程序可能希望得到符合指定条件的LocationProvider,这就需要借助于LocationManager的getBestProvider(Criteria  criteria , boolean  enabledOnle)方法来获取。

上面的方法中Criteria就代表一个“过滤”条件,该方法将只返回符合该Criteria的LocationProvider,Criteria提供如下常用的方法来设置条件:

1、setAccuracy(int  accuracy):设置对LocationProvider的精度要求。

2、setAltitudeRequired(boolean  altitudeRequired):设置要求LocationProvider能提供高度信息。

3、setBearingRequired(boolean  bearingRequired):设置要求LocationProvider能提供方向信息。

4、setCostAllowed(boolean  costAllowed):设置要求LocationProvider是否免费。

5、setPowerRequired(int  level):设置要求LocationProvider的耗电量。

6、setSpeedRequired(boolean  speedRequired):设置要求LocationProvider能提供速度信息。

下面的程序示范了如何获取系统中免费的LocationProvider,并且该LocationProvider必须能提供高度信息、速度信息等。

import java.util.List;

import android.location.Criteria;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class FreeProviderTest extends Activity {
  ListView providers;
  LocationManager lm;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_free_provider_test);
    providers = (ListView) findViewById(R.id.providers);
    //获取系统的LocationManager对象
    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    //创建一个LocationProvider的过滤条件
    Criteria cri = new Criteria();
    //设置要求LocationProvider必须是免费的
    cri.setCostAllowed(false);
    //设置要求LocationProvider能提供高度信息
    cri.setAltitudeRequired(true);
    //设置要求LocationProvider能提供方向信息
    cri.setBearingRequired(true);
    //获取系统所有符合条件的LocationProvider的名称
    List<String> providerNames = lm.getAllProviders();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, providerNames);
    //使用ListView来显示所有可用的LocationProvider
    providers.setAdapter(adapter);
  }

}

上面的程序中粗体字代码创建了一个Criteria对象,并通过设置了LocationProvider必须满足的条件,运行该程序,即可列出所有符合Criteria条件的LocationProvider。

获取LocationProvider的更多相关文章

  1. GPS(1)核心API及3种列出LocationProvider的方法

    GPS的常用API Android SDK为GPS提供了很多API,其中LocationManager类是这些API的核心.所有与GPS相关的操作都由LocationManager对象及其派生的对象完 ...

  2. Android GPS应用开发

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5715879.html GPS定位系统由三部分组成,即由GPS卫星组成的空间部分,若干地面组成的控制部分和普通 ...

  3. 支持GPS的核心API

    Android为GPS功能支持专门提供了一个LocationManager类,它的作用于TelephonyManager.AudioManager等服务类的作用相似,所有GPS定位相关的服务.对象都将 ...

  4. Android中GPS类及方法简介

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

  5. Android开发权威指南(第2版)新书发布

    <Android 开发权威指南(第二版)>是畅销书<Android开发权威指南>的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供 ...

  6. 18、GPS技术

    GPS核心API Android SDK为GPS提供了很多API,其中LocationManager类是这些API的核心.LocationManager是一个系统服务类,与TelephonyManag ...

  7. Android中GPS简介及其应用

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

  8. (转)android mock location

    android mock location 2014-01-26     我来说两句   来源:党玉涛   收藏 我要投稿 现在软件市场上有很多可以改变手机地理位置的软件,更改后打开微信就可以随意定位 ...

  9. Android之 GPS学习笔记

    ========================================GPS:全球定位系统 GPS由三部分组成:GPS卫星组成的空间部分,若干地面组成的控制站,用户手中的接收机.Androi ...

随机推荐

  1. Python2.6.6执行selenium自动化

    系统类型: [root@bogon home]# uname -aLinux bogon 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 20 ...

  2. Frag(匹配跟踪)

    ‘碎片’(Frag)跟踪是目标跟踪里的一种通过‘部分‘匹配识别的方法,其目标模板是通过图像多个碎片和块来描述.块是任意的,不基于目标模型的(与传统的基于’部分‘的方法不一样,比如人体的四肢与躯干的跟踪 ...

  3. Jenkins TcpSlaveAgentListener Config

    http://wenku.baidu.com/link?url=wDbeRoqh8ERRvBKXsKVi7biWe8e369iZmYTfEFDz0aI1Sj5YjXq_AN1gFjFjiS0yBw0W ...

  4. HDU 4770 Lights Against DudelyLights

    Lights Against Dudely Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  5. 解决secureCRT数据库里没有找到防火墙 '无'问题

    中文版的secureCRT由于汉化的问题(把null翻译成无了),导致每次打开都会有个防火墙的错误提示:数据库里没有找到防火墙 '无' 此会话将尝试不通过防火墙进行连接.出现这个错误的原因是在secu ...

  6. Jenkins入门系列之——01第一章 Jenkins是什么?

    第一章 Jenkins是什么? Jenkins 是一个可扩展的持续集成引擎. 主要用于: l 持续.自动地构建/测试软件项目. l 监控一些定时执行的任务. Jenkins拥有的特性包括: l 易于安 ...

  7. json根据key取values

    function getJson(key, jsonObj) { for (var item in jsonObj) { if (item == key) { //item 表示Json串中的属性,如 ...

  8. AtCoder Beginner Contest 050 ABC题

    A - Addition and Subtraction Easy Time limit : 2sec / Memory limit : 256MB Score : 100 points Proble ...

  9. 编写windows7 bat运行脚本

    每天上班,打开电脑后,我总是会固定的打开几个软件.这是重复的工作,我要写脚本startup.bat,直接点击它,就可以启动这些软件了. 本文主要参考这里,只用到了start 和 @Rem 两个命令语句 ...

  10. Eclipse开发过程中个VM Arguments的设置

    Eclipse开发过程中个VM Arguments的设置 1:jre中的Default VM Arguments: -Xms256M -Xmx640M -XX:PermSize=256m -XX:Ma ...