android Google 应用(一) -使用GPS定位手机的位置-

使用GPS定位手机的位置

       本节将介绍通过GPS获取移动设备的位置信息,首先会对LocationManager类进行简单的介绍,然后将通过一个案例来演示如何应用Google服务。

11    LocationManager类相关介绍

LocationManager 类的对象提供了用于访问设备位置的服务,这些服务可以让应用程序获得周期性设备位置数据的更新,还可以在设备位置符合某种特定条件时触发Intent 广播。LocationManager 类的对象不用实例化,而是通过Context 对象的getSystemService(Context.LOCATION_SERVICE方法来获得的。

       通过调用LocationManager类的getLastKnownLocation(String provider) 方法可以取得地理位置信息,该方法的返回值是一个封装好经纬度等信息的Location对象,开发人员可以对其进行解析获取有用的信息。如果不设置查询要求getLastKnownLocation(LocationManager.GPS_PROVIDER) 的参数就传入 LocationManager.GPS_PROVIDER ;

1,             设置查询条件

当需要对地理位置信息获取设置查询条件时,需要创建一个Criteria 并调用该对象的set方法进行条件设置。设置的查询条件包括:地理位置的解析精度,允许的电池电量消耗级别,是否要求海拔高度和速度 等等。

              设置好查询条件之后,调用 LocationManager类的getBestProvider(Criteria criteria, Boolean enabledOnly) 传入创建好的Criteria 对象,该方法返回一个String 对象。

              该String 对象可以作为 LocationManager类的getLastKnownLocation()方法的参数。

 

2,             添加位置变化监听器

调用LocationManager类的getLastKnownLocation()方法只是主动的去获取移动设备的地理位置信息,如果需要设备位置移动后的位置信息自动返回通知系统,可以为LocationManager 添加一个监听器 LocationListener。实现该监听器需要实现以下几个方法。(四个

 

onLocationChanged(Location location

        当设备位置发生变化时 调用该方法

onProviderDisabled(String provider

        当设备的Location Provider 被禁止时,程序会调用该方法。注册监听器时,该方法被立即调用

onProviderEnabled(String provider

       当设备的LocationProvider 被启用时 调用该方法

onStatusChanged(String provider, int status, Bundle extras

        当设备的Location Provider 的状态发生变化时,调用该方法。可取的状态可以为:TEMPROARILY_UNAVALABLE,  OUT_OF_SERVICE,  AVALABLE

      

       通过LocationManager 的 requestLocationUpdates( String Provider,long minTime,float minDistance,LocationListener listener) 方法可以添加一个LocationListener 监听器,其中参数minTime代表位置更新的最短时间,minDistance 代表位置变化的最短距离。

       调用LocationManager 的removeUpdate() 方法可以移除指定的LocationListener 监听器

 

12 获取位置信息案例

上面已经简单介绍了相关的类和方法,下面通过一个案例来演示获取位置信息的步骤:

第一步,在eclipse里新建一个android项目sample01,打开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" >

    <EditText

        android:id="id+@/et"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:editable="false"

        android:cursorVisiable="false"

        />

</LinearLayout>

-----------------------------------------------------------------------------------------------------

 

 

第二步,打开res/com/xtp/目录下的主activity ,代码如下:

-----------------------------------------------------------------------------------------------------

package com.xtp;

 

import android.app.Activity;

import android.content.Context;

import android.location.Criteria;

import android.location.Location;

import android.location.LocationListener;

import android.location.LocationManager;

import android.os.Bundle;

import android.widget.EditText;

 

public class Google_Sample01 extends Activity {

    /** Called when the activity is first created. */

   LocationManager lm;

   EditText et;

   LocationListener listener = new LocationListener() {

      @Override

      public void onStatusChanged(String provider, int status, Bundle extras) {

        // TODO Auto-generated method stub

       

      }

      @Override

      public void onProviderEnabled(String provider) {

        // TODO Auto-generated method stub

        Location location = lm.getLastKnownLocation(provider);

        updateView(location);

      }

      @Override

      public void onProviderDisabled(String provider) {

        // TODO Auto-generated method stub

        updateView(null);

      }

      @Override

      public void onLocationChanged(Location location) {

        // TODO Auto-generated method stub

        updateView(location);

      }

   };

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

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

        et = (EditText) findViewById(R.id.et);

      String bestProvier = lm.getBestProvider(getCriteria() , true);

      Location location = lm.getLastKnownLocation(bestProvier);

      lm.requestLocationUpdates(bestProvier, 5000, 8, listener);

    }

    private void updateView(Location newLocation) {

      // TODO Auto-generated method stub

      if (newLocation != null) {

        et.setText("您现在的位置是\n 维度:");

        et.append(String.valueOf(newLocation.getLatitude()));

        et.setText("\n 经度:");

        et.append(String.valueOf(newLocation.getLongitude()));

      }else {

        et.getEditableText().clear();

      }

     

   }

   private Criteria getCriteria() {

      // TODO Auto-generated method stub

      Criteria mCriteria = new Criteria();

      mCriteria.setAccuracy(Criteria.ACCURACY_COARSE);

      mCriteria.setSpeedRequired(false);

      mCriteria.setCostAllowed(false);

      mCriteria.setBearingRequired(false);

      mCriteria.setAltitudeRequired(false);

      mCriteria.setPowerRequirement(Criteria.POWER_LOW);

     

      return mCriteria;

   }

}

-----------------------------------------------------------------------------------------------------

虽然模拟器中没有GPS设备,但是可以通过DDMS工具提供的 EmulatorControl 来模拟GPS数据。

转载于:https://www.cnblogs.com/xiangtongpeng/archive/2012/01/10/2317801.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值