优定义网

Android获取当前位置(GPS和网络定位)

朴子萱 发表于 2018-6-11 20:20:26 | 显示全部楼层 |阅读模式

1、比较:

GPS准确度高但耗电多,网络定位耗电少但准确度低

2、代码

①添加权限:

AndroidManifest.xml:

  1. <!-- 两种provider的权限 -->
  2.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  3.     <!-- 仅网络定位的权限 -->
  4.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
复制代码

注:因为手机问题没有测试好,不确定是否加访问网络权限

②Java代码:

  1. public class MainActivity extends Activity {
  2.     //定位都要通过LocationManager这个类实现
  3.     private LocationManager locationManager;
  4.     private String provider;
  5.     @SuppressWarnings("static-access")
  6.     @Override
  7.     protected void onCreate(Bundle savedInstanceState) {
  8.         super.onCreate(savedInstanceState);
  9.         setContentView(R.layout.activity_main);
  10.         //获取定位服务
  11.         locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
  12.         //获取当前可用的位置控制器
  13.         List<String> list = locationManager.getProviders(true);
  14.         if (list.contains(LocationManager.GPS_PROVIDER)) {
  15.         //是否为GPS位置控制器
  16.             provider = LocationManager.GPS_PROVIDER;
  17.         }
  18.         else if (list.contains(LocationManager.NETWORK_PROVIDER)) {
  19.         //是否为网络位置控制器
  20.             provider = LocationManager.NETWORK_PROVIDER;
  21.         } else {
  22.             Toast.makeText(this, "请检查网络或GPS是否打开",
  23.                     Toast.LENGTH_LONG).show();
  24.             return;
  25.         }
  26.         Location location = locationManager.getLastKnownLocation(provider);
  27.         if (location != null) {
  28.             //获取当前位置,这里只用到了经纬度
  29.             String string = "纬度为:" + location.getLatitude() + ",经度为:"
  30.                     + location.getLongitude();
  31.         }
  32. //绑定定位事件,监听位置是否改变
  33. //第一个参数为控制器类型第二个参数为监听位置变化的时间间隔(单位:毫秒)
  34. //第三个参数为位置变化的间隔(单位:米)第四个参数为位置监听器        
  35. locationManager.requestLocationUpdates(provider, 2000, 2,
  36.                 locationListener);
  37.     }
  38.     LocationListener locationListener = new LocationListener() {
  39.         @Override
  40.         public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
  41.             // TODO Auto-generated method stub
  42.         }
  43.         @Override
  44.         public void onProviderEnabled(String arg0) {
  45.             // TODO Auto-generated method stub
  46.         }
  47.         @Override
  48.         public void onProviderDisabled(String arg0) {
  49.             // TODO Auto-generated method stub
  50.         }
  51.         @Override
  52.         public void onLocationChanged(Location arg0) {
  53.             // TODO Auto-generated method stub
  54.             // 更新当前经纬度
  55.         }
  56.     };
  57.     //关闭时解除监听器
  58.     @Override
  59.     protected void onDestroy() {
  60.         // TODO Auto-generated method stub
  61.         super.onDestroy();
  62.         if (locationManager != null) {
  63.             locationManager.removeUpdates(locationListener);
  64.         }
  65.     }
  66. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精华推荐
  • 一个人开始废掉的3种迹象

    一个人开始废掉的3种迹象

  • 从零到60秒的惬意冰镇啤酒

    从零到60秒的惬意冰镇啤酒

  • 马云、马化腾、王石都弃之不用的人,有一个共同点

    马云、马化腾、王石都弃之不用的人,有一个

  • 哥特式高迪凳子

    哥特式高迪凳子

  • 千亿小米,雷军逆袭

    千亿小米,雷军逆袭

  • 她一战赚了几十亿,她说:世界上最好的生意有三种

    她一战赚了几十亿,她说:世界上最好的生意有

  • 雷军:合伙人比制度更重要!

    雷军:合伙人比制度更重要!

  • 一个美美的令人喜欢的自行车铃

    一个美美的令人喜欢的自行车铃

QQ客服热线
QQ:1090281100 周一至周日:09:00 - 21:00
WeChat:dianlingkeji
Email:kaixin1069@vip.qq.com

优定义logo

勿要吝啬你无形资产,请为创新续源,知识、点子、灵感、经验、需求等均是创新源泉,你不经意的一句话将是另一个人的灵感。明天的明天,还有明天,我们应该把握今天,每一个今天,都有一个新的事物在出现,今天的漠视明天的落后,不浪费每一个学习的时刻,学习助力非凡。

技术支持 Discuz! X3.4 - 3.5 beta © 2001-2018 Comsenz Inc.

小黑屋|手机版|优定义 ( 粤ICP备16085288号-2 )|申请友链|网站地图

粤公网安备 44011102001144 号 GMT+8, 2018-8-22 07:37 , Processed in 0.087063 second(s), 26 queries .

快速回复 返回顶部 返回列表