热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

AndroidLocationManager获取经度与纬度等地理信息

这篇文章主要介绍了AndroidLocationManager获取经度与纬度等地理信息的相关资料,希望通过本站大家能掌握这样的知识,需要的朋友可以参考下

Android LocationManager获取经度与纬度等地理信息

利用LocationManager实现定位功能  

1 实时更新经度,纬度  

2 根据经度和纬度获取地理信息(比如:国家,街道等)(略过)

MainActivity如下:

package cc.bb; 
 
import java.util.Iterator; 
import java.util.List; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.app.Activity; 
import android.content.Context; 
/** 
 * Demo描述: 
 * 利用LocationManager实现定位功能 
 * 1 实时更新经度,纬度 
 * 2 根据经度和纬度获取地理信息(比如:国家,街道等)(略过) 
 * 
 * 
 * 注意事项: 
 * 0 在测试GPS定位时最好在较为宽广的空间,否则影响定位 
 * 1 利用mLocationManager.getLastKnownLocation(GPSProvider)获取Location时常为null. 
 *  因为设备定位是需要一定时间的,所以把定位逻辑放在LocationManager的requestLocationUpdates()方法 
 *  
 * 2 LocationManager.requestLocationUpdates 
 *  (String provider, long minTime, float minDistance, LocationListener listener) 
 *  第一个参数:位置信息的provider,比如GPS 
 *  第二个参数:更新位置信息的时间间隔,单位毫秒 
 *  第三个参数:更新位置信息的距离间隔,单位米 
 *  第四个参数:位置信息变化时的回调 
 *  
 * 3 LocationListener中最重要的回调方法onLocationChanged() 
 *  当minTime和minDistance同时满足时会调用该方法.文档说明: 
 *  The minDistance parameter can also be used to control the 
 *  frequency of location updates. If it is greater than 0 then the 
 *  location provider will only send your application an update when 
 *  the location has changed by at least minDistance meters, AND 
 *  at least minTime milliseconds have passed. 
 *  比如间隔时间(minTime)到了3秒并且移动的距离(minDistance)大于了5米 
 *  那么就会调用该方法. 
 *  
 * 4 在Activity的onDestroy()时取消地理位置的更新. 
 * 
 * 
 * 权限配置: 
 *  
 *  
 *  
 *  
 */ 
public class MainActivity extends Activity { 
  private Context mContext; 
  private TextView mTextView; 
  private LocationManager mLocationManager; 
  private LocationListenerImpl mLocationListenerImpl; 
 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    init(); 
    initLocationManager(mContext); 
  } 
   
  private void init(){ 
    mCOntext=this; 
    mTextView=(TextView) findViewById(R.id.textView); 
  } 
 
  private void initLocationManager(Context context){ 
     
    mLocatiOnManager=(LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 
     
    //获取可用的位置信息Provider.即passive,network,gps中的一个或几个 
    List providerList=mLocationManager.getProviders(true); 
    for (Iterator iterator = providerList.iterator(); iterator.hasNext();) { 
      String provider = (String) iterator.next(); 
      System.out.println("provider="+provider); 
    } 
     
     
    //在此采用GPS的方式获取位置信息 
    String GPSProvider=LocationManager.GPS_PROVIDER; 
    Location location=mLocationManager.getLastKnownLocation(GPSProvider); 
    if (location!=null) { 
      double lOngitude=location.getLongitude(); 
      double altitude=location.getAltitude(); 
      System.out.println("lOngitude="+longitude+",altitude="+altitude); 
    } else { 
      System.out.println("location==null"); 
    } 
     
    //注册位置监听 
    mLocatiOnListenerImpl=new LocationListenerImpl(); 
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 5, mLocationListenerImpl); 
  } 
   
   
  private class LocationListenerImpl implements LocationListener{ 
    //当设备位置发生变化时调用该方法 
    @Override 
    public void onLocationChanged(Location location) { 
      if (location!=null) { 
        showLocation(location); 
      } 
    } 
 
    //当provider的状态发生变化时调用该方法.比如GPS从可用变为不可用. 
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
       
    } 
 
    //当provider被打开的瞬间调用该方法.比如用户打开GPS 
    @Override 
    public void onProviderEnabled(String provider) { 
       
    } 
 
    //当provider被关闭的瞬间调用该方法.比如关闭打开GPS 
    @Override 
    public void onProviderDisabled(String provider) { 
       
    } 
     
  } 
   
   
  private void showLocation(Location location) { 
    // 获取经度 
    double lOngitude= location.getLongitude(); 
    // 获取纬度 
    double altitude = location.getAltitude(); 
    String message="经度为:"+longitude+"\n"+"纬度为:"+altitude; 
    mTextView.setText(message); 
     
  } 
   
  @Override 
  protected void onDestroy() { 
    super.onDestroy(); 
    if (mLocationManager!=null) { 
      mLocationManager.removeUpdates(mLocationListenerImpl); 
    } 
  } 
 
 
   
 
} 

main.xml如下:

 
 
   
 
 

如有疑问请留言或者到本站社区交流讨论,本站关于Android开发的文章还有很多,希望大家多多搜索查阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


推荐阅读
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 创建项目:Visual Studio Online 入门指南
    本文介绍如何使用微软的 Visual Studio Online(VSO)创建和管理开发项目。作为一款基于云计算的开发平台,VSO 提供了丰富的工具和服务,简化了项目的配置和部署流程。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
  • 优化 Android 按钮状态下的背景和文本颜色变化
    本文介绍如何通过 Android 的 Selector 实现按钮在不同状态下(如按压)的背景和文本颜色动态变化。我们将详细讲解实现步骤,并提供完整的代码示例。 ... [详细]
  • 本文详细介绍超文本标记语言(HTML)的基本概念与语法结构。HTML是构建网页的核心语言,通过标记标签描述页面内容,帮助开发者创建结构化、语义化的Web页面。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 分享一个简化版的Silverlight链接图项目:Link Map Simplified
    本文介绍了一个使用Silverlight开发的可视化工具,主要用于展示和操作复杂的实体关系图(Graph)。该工具在犯罪调查系统中得到了广泛应用,帮助用户直观地获取和理解相关信息。 ... [详细]
  • 探讨如何从数据库中按分组获取最大N条记录的方法,并分享新年祝福。本文提供多种解决方案,适用于不同数据库系统,如MySQL、Oracle等。 ... [详细]
  • 本文介绍了ArcXML配置文件的分类及其在不同服务中的应用,详细解释了地图配置文件的结构和功能,包括其在Image Service、Feature Service以及ArcMap Server中的使用方法。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • 本文详细介绍了 RosPack 类的功能和用法,探讨了其在 ROS 系统中的重要作用。RosPack 类提供了类似于终端命令 rospack 的功能,能够方便地查询和管理 ROS 包的相关信息。 ... [详细]
  • 本文探讨了如何在iOS开发环境中,特别是在Xcode 6.1中,设置和应用自定义文本样式。我们将详细介绍实现方法,并提供一些实用的技巧。 ... [详细]
  • 各位相加AddDigits题述给定一个非负整数num,反复将各个位上的数字相加,直到结果为一位数。示例:输入:38输出:2解释:各位相加的过程为:3+811,1+12。由于2是一位 ... [详细]
  • 本文详细介绍了 Java 中的 org.apache.hadoop.registry.client.impl.zk.ZKPathDumper 类,提供了丰富的代码示例和使用指南。通过这些示例,读者可以更好地理解如何在实际项目中利用 ZKPathDumper 类进行注册表树的转储操作。 ... [详细]
author-avatar
错2502857987
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有