在Android应用程序中,可以使用LocationManager来获取移动设备所在的地理位置信息。看如下实例:新建android应用程序TestLocation。

1、activity_main.xml布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:id="@+id/positionView"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>

用于显示获取到的位置信息。

2、MainActivity.java

package com.example.testlocation;import java.util.List;import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends Activity {private TextView postionView;private LocationManager locationManager;private String locationProvider;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取显示地理位置信息的TextViewpostionView = (TextView) findViewById(R.id.positionView);//获取地理位置管理器locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);//获取所有可用的位置提供器List<String> providers = locationManager.getProviders(true);if(providers.contains(LocationManager.GPS_PROVIDER)){//如果是GPSlocationProvider = LocationManager.GPS_PROVIDER;}else if(providers.contains(LocationManager.NETWORK_PROVIDER)){//如果是NetworklocationProvider = LocationManager.NETWORK_PROVIDER;}else{Toast.makeText(this, "没有可用的位置提供器", Toast.LENGTH_SHORT).show();return ;}//获取LocationLocation location = locationManager.getLastKnownLocation(locationProvider);if(location!=null){//不为空,显示地理位置经纬度showLocation(location);}//监视地理位置变化locationManager.requestLocationUpdates(locationProvider, 3000, 1, locationListener);}/*** 显示地理位置经度和纬度信息* @param location*/private void showLocation(Location location){String locationStr = "维度:" + location.getLatitude() +"\n" + "经度:" + location.getLongitude();postionView.setText(locationStr);}/*** LocationListern监听器* 参数:地理位置提供器、监听位置变化的时间间隔、位置变化的距离间隔、LocationListener监听器*/LocationListener locationListener =  new LocationListener() {@Overridepublic void onStatusChanged(String provider, int status, Bundle arg2) {}@Overridepublic void onProviderEnabled(String provider) {}@Overridepublic void onProviderDisabled(String provider) {}@Overridepublic void onLocationChanged(Location location) {//如果位置发生变化,重新显示showLocation(location);}};@Overrideprotected void onDestroy() {super.onDestroy();if(locationManager!=null){//移除监听器locationManager.removeUpdates(locationListener);}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

从上面可以看出,获取地理位置信息主要分如下步骤:

(1)获取LocationManager实例,通过getSystemService方法,传入Context.LOCATION_SERVICE参数。

(2)获取可用的位置提供器,有GPS_PROVIDER、NETWORK_PROVIDER、PASSIVE_PROVIDER三种,前两种比较常用。

(3)将(2)获取到的位置提供器传入LocationManager的方法getLastKnownLocation,即可获取Location信息。

如果移动设备地理位置不断发生变化,则实时更新需要进行如下步骤:

(4)调用LocationManager的requestLocationUpdates方法,第一个参数是位置提供器,第二个参数是监听位置变化的时间间隔(毫秒),第三个参数是监听位置变化的距             离间隔(米),第四个参数是LocationListener监听器

(5)当位置发生变化后,就会调用监听器的onLocationChanged方法。

(6)为了省电,节约资源,当程序关闭后,调用LocationManager的removeUpdates方法移除监听器。

3、获取权限

修改AndroidManifest.xml,添加如下代码:

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

4、效果

使用模拟器进行测试:点击send

                                                                                                            

可以使用Geocoding API查找具体对应的位置。如下:

(1)修改MainActivity.java

package com.example.testlocation;import java.util.List;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends Activity {private TextView postionView;private LocationManager locationManager;private String locationProvider;public static final int SHOW_LOCATION = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取显示地理位置信息的TextViewpostionView = (TextView) findViewById(R.id.positionView);//获取地理位置管理器locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);//获取所有可用的位置提供器List<String> providers = locationManager.getProviders(true);if(providers.contains(LocationManager.GPS_PROVIDER)){//如果是GPSlocationProvider = LocationManager.GPS_PROVIDER;}else if(providers.contains(LocationManager.NETWORK_PROVIDER)){//如果是NetworklocationProvider = LocationManager.NETWORK_PROVIDER;}else{Toast.makeText(this, "没有可用的位置提供器", Toast.LENGTH_SHORT).show();return ;}//获取LocationLocation location = locationManager.getLastKnownLocation(locationProvider);if(location!=null){//不为空,显示地理位置经纬度showLocation(location);}else{Toast.makeText(this, "location为空", Toast.LENGTH_SHORT).show();}//监视地理位置变化locationManager.requestLocationUpdates(locationProvider, 3000, 1, locationListener);}private Handler handler = new Handler(){public void handleMessage(Message msg){switch(msg.what){case SHOW_LOCATION:String position = (String) msg.obj;postionView.setText(position);break;default:break;}}};/*** 显示地理位置经度和纬度信息* @param location*/private void showLocation(final Location location){/*String locationStr = "维度:" + location.getLatitude() +"\n" + "经度:" + location.getLongitude();postionView.setText(locationStr);*/new Thread(new Runnable() {@Overridepublic void run() {try{//组装反向地理编码的接口位置StringBuilder url = new StringBuilder();url.append("http://maps.googleapis.com/maps/api/geocode/json?latlng=");url.append(location.getLatitude()).append(",");url.append(location.getLongitude());url.append("&sensor=false");HttpClient client = new DefaultHttpClient();HttpGet httpGet = new HttpGet(url.toString());httpGet.addHeader("Accept-Language","zh-CN");HttpResponse response = client.execute(httpGet);if(response.getStatusLine().getStatusCode() == 200){HttpEntity entity = response.getEntity();String res = EntityUtils.toString(entity);//解析JSONObject jsonObject = new JSONObject(res);//获取results节点下的位置信息JSONArray resultArray = jsonObject.getJSONArray("results");if(resultArray.length() > 0){JSONObject obj = resultArray.getJSONObject(0);//取出格式化后的位置数据String address = obj.getString("formatted_address");Message msg = new Message();msg.what = SHOW_LOCATION;msg.obj = address;handler.sendMessage(msg);}}}catch(Exception e){e.printStackTrace();}}}).start();}/*** LocationListern监听器* 参数:地理位置提供器、监听位置变化的时间间隔、位置变化的距离间隔、LocationListener监听器*/LocationListener locationListener =  new LocationListener() {@Overridepublic void onStatusChanged(String provider, int status, Bundle arg2) {}@Overridepublic void onProviderEnabled(String provider) {}@Overridepublic void onProviderDisabled(String provider) {}@Overridepublic void onLocationChanged(Location location) {//如果位置发生变化,重新显示showLocation(location);}};@Overrideprotected void onDestroy() {super.onDestroy();if(locationManager!=null){//移除监听器locationManager.removeUpdates(locationListener);}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

(2)修改AndroidManifest.xml

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

Android 获取地理位置的经度和纬度相关推荐

  1. html5获取纬度经度,html5获取不了经度和纬度

    点击这个按钮,获得您的位置: 试一下 var x=document.getElementById("demo"); function getLocation() { if (nav ...

  2. Android 获取地理位置信息 封装好了 直接用

    前言:花了一个早上研究了以下android获取经纬度,然后网上的参考资料都是杂七杂八,基本上都是过去几年的,现在我用 android6.0参照别人的结果发生好多错误,我的内心几乎是崩溃的.后来,不断百 ...

  3. Android 获取地理位置获取经纬度

    下载jar https://pan.baidu.com/s/1ioZ5_24WvsmMYxIcgoLyvA 复制到libs下 附代码 static BDLocation lastLocation = ...

  4. html5 获取 坐标 ios,HTML5 安卓|苹果浏览器获取经度和纬度(百度API)

    有时候需要用户注册时所处的地理位置信息,所以H5获取地图经纬度及地址信息也是不少开发者会遇到的,当然通过微信或小程序内置的功能就不存在这个问题了 由于H5自带的navigator.geolocatio ...

  5. HTML5手机浏览器获取经度和纬度(百度API)

    网页获取用户位置信息的办法 1 调用百度地图的地图标注功能,通过百度地图API获取对应的经度和纬度进而获取地区信息优点是比较准确,缺点是需要用户自己选择位置 2 通过H5 geolocation属性获 ...

  6. vue 地理位置定位_Vue 通过调用百度API获取地理位置-经度纬度省份城市

    一.首先在百度api注册获得ak密钥 二.新建js文件,我命名为loadBMap.js,里面创建script,代码如下: /** * 加载地图 * @param {Function} callback ...

  7. C#调用百度api,根据经度和纬度获取地理位置信息

            /// <summary>         /// 百度api 根据经纬度获取地理位置         /// </summary>         /// & ...

  8. android 获取经纬度 有负值吗,获取纬度和经度的负值

    我想在我的应用程序中得到经度和纬度的值,我已经做到了,但问题是我用值得到了负号.虽然值是正确的,但不知道为什么用值得到负号. java类代码: package com.vshine.neuron.te ...

  9. 【Android笔记 二】Location获取地理位置信息(上)

    2011 7 22暑假实训的第五天,跟大家分享以下我对Android location的学习吧,这是一个最基本的获取地理位置信息的入门,下一次给大家介绍更质能化的地理位置选择Criteria,今天就先 ...

  10. 根据地址获取经度和纬度

    /// <summary>/// 根据地址获取经度和纬度/// </summary>public string GetlatlngByAddress(string addres ...

最新文章

  1. Docker的“谎言”
  2. 软考已报名可以更改科目吗
  3. numpy之reshape()
  4. 改造独立部署(SCD)模式下.NET Core应用程序 dotnet的exe文件启动过程
  5. 浮动div,回到顶部
  6. 蜜蜂性别调控又有新机制?
  7. web-基础入门-web框架-web服务器-wsgi接口
  8. 170630、springboot编程之普通类中调用spring管理的bean对象
  9. mysql循环更新_MySql多表循环遍历更新
  10. Debian Chroot on Synology NAS
  11. (转)Julia PkgServer 镜像服务
  12. 计算机组成原理(白中英) 第三章 课后题答案
  13. 高等数学(第七版)同济大学 习题1-2 个人解答
  14. EasyCHM chm文件制作过程及软件附软件下载地址
  15. 2019上半年教资综合素质——主观题
  16. 工程师视角的手游SDK
  17. 除了Stripe,Paypal国内还能使用哪些海外支付接口
  18. Error: Cannot find module ‘babel-preset-es2015‘
  19. 漫步者蓝牙耳机连接常见问题
  20. 【数据库】HIVE SQL实现本月一号、月底的提取

热门文章

  1. matlab求解全微分函数,Matlab求解一元函数,再求全微分的错误,表达式复杂不会........
  2. 诚之和:一年过去了,蚂蚁集团IPO“批文”到期!再上市需重新“排队”
  3. 【软考系统架构设计师】2010年下系统架构师案例分析历年真题
  4. 截止失真放大电路_音频功放失真?别急!这里有常见改善方法
  5. pentaho安装mysql驱动_在Pentaho数据集成中安装MySQL JDBC驱动
  6. 自动量程万用表的实现原理_自动量程万用表设计方案
  7. element-UI中分页组件显示英文的解决方案
  8. C语言或C++中不同类型指针所占内存大小
  9. linux环境做路径左斜杠和右斜杠,不同操作系统下的路径分隔符—反斜杠与斜杠...
  10. 给Matlab添加工具箱Toolbox的方法(有截图详细讲解)(R2019b)