位置服务,获取当前位置--LocationManager的简单使用

刚接触到移动客户端的特色--位置服务,记录一下简单有效的代码。

 

首先获取一个LocationManager的实例

//获取LocationManager的一个实例,这里需要注意的是他的实例只能通过下面这种方式来获取,直接实例化LocationManager是不被允许的
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

选择一个位置提供器来确定设备当前的位置。Android中有三种位置提供器,GPS_PROVIDER(GPS定位),NETWORK_PROVIDER(网络定位)和PASSIVE_PROVIDER。

 

其次,将选择好的位置提供器传入到getLastKnownLocation()方法中,就可以得到一个Location对象。  如果不确定哪些位置提供器可用,可以先用下面的方法做个判断.

private  String provider;

        // 如果不确定哪些位置提供器可用,可以用下面方法判断 。获取所有可用的位置提供器
        List<String> providerList = locationManager.getProviders(true);

        if (providerList.contains(LocationManager.GPS_PROVIDER))
        {
            provider = LocationManager.GPS_PROVIDER;
        } else if (providerList.contains(LocationManager.NETWORK_PROVIDER))
        {
            provider = LocationManager.NETWORK_PROVIDER;
        } else
        {
            // 当没有可用的位置提供器时,弹出Toash提示用户

            Toast.makeText(this, "No Location provider to use", Toast.LENGTH_SHORT).show();
            return;
        }

        //通过provider获得Location的对象
        Location location = locationManager.getLastKnownLocation(provider);

 

以上获得了设备的位置信息。当设备位置变化时需要更新信息,LoactionManager提供了requestLocationUpdates()方法,传入一个LocationListener实例。

//    得到了LocationManager的实例locatonManager以后,我们通过下面的语句来注册一个周期性的位置更新
        locationManager.requestLocationUpdates(provider, 5000, 1, locationListener);

        /*第一个参数 是位置提供器的类型,上面的代码可以获得
         * 第二个参数是监听位置变化的时间,单位毫秒
         * 第三个参数是监听位置变化的距离间隔,单位米
         * 第四个三个是个监听器,需要 实例化 LocationListener
         */
    LocationListener locationListener = new LocationListener()
    {

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras)
        {
            // Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
        }

        @Override
        public void onProviderEnabled(String provider)
        {
            // Provider被disable时触发此函数,比如GPS被关闭
        }

        @Override
        public void onProviderDisabled(String provider)
        {
        //  Provider被enable时触发此函数,比如GPS被打开
        }

        @Override
        public void onLocationChanged(Location location)
        {
            //当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发 

            // 更新当前设备的位置信息
            showLocation(location);
        }
    };

 

以上的这些步骤一般应当在Activity的onCreate()阶段完成。

 

 

在成功注册了一个周期性坐标更新以后,我们就随时可以通过下面的方法来取得当前的坐标了。

Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double latitude = location.getLatitude();     //经度
double longitude = location.getLongitude(); //纬度
double altitude =  location.getAltitude();     //海拔

 

最后,获取位置是需要注册的。

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

 

 

以下是全部代码,布局文件中只有一个TextView

package com.example.locationtest;

import java.util.List;

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Window;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity
{

    private TextView positonTextView;
    private String provider;
    private LocationManager locationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        positonTextView = (TextView) findViewById(R.id.postion_textView);
        //获取LocationManager的一个实例,这里需要注意的是他的实例只能通过下面这种方式来获取,直接实例化LocationManager是不被允许的
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        // 如果不确定哪些位置提供器可用,可以用下面方法判断 。获取所有可用的位置提供器
        List<String> providerList = locationManager.getProviders(true);

        if (providerList.contains(LocationManager.GPS_PROVIDER))
        {
            provider = LocationManager.GPS_PROVIDER;
        } else if (providerList.contains(LocationManager.NETWORK_PROVIDER))
        {
            provider = LocationManager.NETWORK_PROVIDER;
        } else
        {
            // 当没有可用的位置提供器时,弹出Toash提示用户

            Toast.makeText(this, "No Location provider to use", Toast.LENGTH_SHORT).show();
            return;
        }

        //通过provider获得Location的对象
        Location location = locationManager.getLastKnownLocation(provider);
        if (location != null)
        {
            // 显示当前设备的位置信息
            showLocation(location);

        }

//        得到了LocationManager的实例locatonManager以后,我们通过下面的语句来注册一个周期性的位置更新
        locationManager.requestLocationUpdates(provider, 5000, 1, locationListener);

        /*第一个参数 是位置提供器的类型,上面的代码可以获得
         * 第二个参数是监听位置变化的时间,单位毫秒
         * 第三个参数是监听位置变化的距离间隔,单位米
         * 第四个三个是个监听器,需要 实例化 LocationListener
         */
    }

    LocationListener locationListener = new LocationListener()
    {

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras)
        {
            // Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
        }

        @Override
        public void onProviderEnabled(String provider)
        {
            // Provider被disable时触发此函数,比如GPS被关闭
        }

        @Override
        public void onProviderDisabled(String provider)
        {
        //  Provider被enable时触发此函数,比如GPS被打开
        }

        @Override
        public void onLocationChanged(Location location)
        {
            //当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发 

            // 更新当前设备的位置信息
            showLocation(location);
        }
    };
    protected void onDestroy()
    {
        super.onDestroy();
        if (locationManager != null)
        {
            // 关闭程序时将监听器移除
            locationManager.removeUpdates(locationListener);
        }
    }
    private void showLocation(Location location)
    {
        String currentPosition = "latitude is" + location.getLatitude() + "\n" + "longitude is "
                + location.getLongitude();
        System.out.println(currentPosition);
        positonTextView.setText(currentPosition);
    }

}
时间: 2024-10-11 13:02:49

位置服务,获取当前位置--LocationManager的简单使用的相关文章

Android笔记三十二.Android位置服务及核心API

一.位置服务概念 1.位置服务 位置服务(Location-Based Services,LBS),又称定位服务或基于位置的服务,融合了GPS定位.移动通信.导航等多种技术,提供了与个空间位置相关的综合应用服务. 2.GPS与网络位置提供器 Android平台支持提供位置服务的API,可以利用GPS(Global Positioning System,全球定位系统)和Network Location Provider(网络位置提供器)来获得用户的位置. (1)GPS相对来说更精确,但它只能在户外

Android获取手机位置代码实现

1.项目Src下创建...service包,然后新建GPSService类 1 package com.zebra.mobilesafe.service; 2 import java.io.IOException; 3 import java.io.InputStream; 4 5 import android.app.Service; 6 import android.content.Intent; 7 import android.content.SharedPreferences; 8 i

[原创]Android中LocationManager的简单使用,获取当前位置

Android中LocationManager的提供了一系列方法来地理位置相关的问题,包括查询上一个已知位置:注册/注销来自某个 LocationProvider的周期性的位置更新:以及注册/注销接近某个坐标时对一个已定义Intent的触发等.今天我们就来看看Android 中LocatinManager的简单使用,以获取当前所在的位置为例. 首先,我们需要获取LocationManager的一个实例,这里需要注意的是他的实例只能通过下面这种方式来获取,直接实例化LocationManager是

Android位置服务介绍,并介绍如何通过LocationManager对象获取位置信息

 1.位置服务,英文翻译为Location-Based Services,简称LBS,又称为定位服务或基于位置的服务,融合了GPS定位.移动通信.导航等多种技术,提供与空间位置相关的综合应用服务,基于位置的服务发展很迅速,涉及商务.医疗.工作和生活的各个方面,为用户提供定位.追踪和敏感区域警告等一系列服务.比如谷歌地图,百度地图,都需要通过位置服务. 2.Android平台下支持提供位置服务的API,在开发过程中主要用到LocationManager和LocationProviders对象:

微信服务号开发-获取用户位置信息

微信服务号开发-获取用户位置信息 在微信公众号开发的中,获取用户位置信息是非常常见的功能需求,通过用户的位置信息,可以做一些地图导航,以及基于LBS的营销活动.下面将介绍微信服务号获取用户位置信息的原理与步骤. 原理 1. 位置信息获取流程 2. 位置信息报文 <xml><ToUserName><![CDATA[gh_public_member_account]]></ToUserName> <FromUserName><![CDATA[o

Android 位置服务

原文来自:http://developer.android.com/guide/topics/location/strategies.html 位置策略 注意: 本指南仅限android.location位置API.Google Play Services中的google位置API提供更强大更高级的框架,自动处理位置provider.用户移动和位置安全.它也依据电池消耗情况调整位置更新策略.在大多数情况下,使用Location Services API,你将获得更好的电池性能,更合适的精度. 更

百度地图定位 : 获取当前位置的经纬度

说明: 1.初始化 BaiduMap SDK要在显示界面之前,即: SDKInitializer.initialize(Context); setContentView(R.layout.main); 2. 设置定位的模式是 LocationMode.Hight_Accuracy 时,在室内可能无法获取到准确的经纬度,会得到默认的值是4.9E-324 处理办法是将模式改为Battery_Saving,或到室外 3.可以根据当前设备网络连接情况和GPS是否开启来设定定位模式 //获得网络连接情况

地图篇-01.获取用户位置

地图篇-01.获取用户位置 今天把地图整理了一下,共享出来和大家一起分享,希望帮助到不了解的朋友,当然很精通的朋友希望指正小生的不足. 1.说到地图,首先要接触一个framework -CoreLocation.framework 创建一个项目 点击"+"号之后,跳转到下个界面 导入完毕 2.原理: 大家平时在使用iPhone时,每下载一个App,第一次打开的时候,都会有这样的提示 是吧,这时候我们如果选择了不允许的话,这个App是获取不了我们的位置的,相应的App里面涉及到位置的功能

【Android】第18章 位置服务和手机定位&mdash;本章示例主界面

分类:C#.Android.VS2015: 创建日期:2016-03-04 一.简介 目前,基于位置的服务发展迅速,已涉及到商务.医疗.定位.追踪.敏感区域警告.工作和生活等各个方面.定位服务融合了GPS定位.移动通信.导航等多种技术,从而获取用户终端设备的位置信息,为移动用户提供了与空间位置相关的综合应用服务. 这一章我们主要以安卓内置的定位服务和百度定位服务为例,演示定位服务(Location Service)的基本用法. 二.本章示例主界面 1.运行截图 2.MainActivity.cs