最近做一个关于 手机定位的功能,自己记录一下,一来加深记忆,二来希望能给大家一点思路,代码亲测有效。

直接贴代码:

清单文件要加的权限,代码中还有动态权限申请

<!--定位权限-->
<uses-permission android:name="android.permission.ACCESS_FIND_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

布局不在给出只有一个button和一个textView

public class MainActivity extends AppCompatActivity {private Button getLocation;
    private TextView myLocation;
    private double latitudeGps;
    private double longitudeGps;
    private double latitudeNet;
    private double longitudeNet;
    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        setListener();
    }private void setListener() {getLocation.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View view) {myLocation.setText("您现在的位置经度是:"+longitudeGps+"维度是:"+latitudeGps);
            }});
    }private void initView() {getLocation = (Button) findViewById(R.id.getLocation_btn);
        myLocation = (TextView) findViewById(R.id.myLocation_tv);
        getMyLocation();
    }public void getMyLocation() {//要加动态权限,清单文件也要加权限
        //被拒绝情况
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_DENIED) {//申请
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 0);
            initLocation();
        } else {initLocation();
        }}//加载本地位置
    private void initLocation() {LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(false);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
//
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {// TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }Location locationGps = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        Location locationNet = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        if (locationGps!=null){latitudeGps = locationGps.getLatitude();
            longitudeGps = locationGps.getLongitude();
            choseLocationType();
        }else if (locationNet!=null){latitudeNet = locationNet.getLatitude();
            longitudeNet = locationGps.getLongitude();
            choseLocationType();
        }else {Toast.makeText(MainActivity.this,"获取位置失败,请检查网络",Toast.LENGTH_SHORT).show();
        }LocationListener locationListener = new LocationListener() {@Override
            public void onLocationChanged(Location location) {}@Override
            public void onStatusChanged(String s, int i, Bundle bundle) {}@Override
            public void onProviderEnabled(String s) {}@Override
            public void onProviderDisabled(String s) {}};
        //更新(间隔自己定义)
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,10,1000,locationListener);
    }private void choseLocationType() {if (latitudeNet>0&&latitudeGps<=0){latitudeGps=latitudeNet;
        }else if (longitudeNet>0&&longitudeGps<=0){longitudeGps=longitudeNet;
        }}
}

请注意以下几点:

一:第一次打开app可能获取到为0.0,关闭app再代开就可以,以后都正常,因为这里用了getLastKnowLocation 获得最后一次的

二:本文是获取经纬度,如果您还需要获取具体位置,可以尝试一下Goolge的location包提供的Geocoder类,他可以把经纬度转成具体位置还可以把具体位置转为经纬度,但鉴于Google服务的稳定性,您可以考虑一下借助百度的服务来获取具体位置信息。

三:关于Criteria类,这里引用一位大神的翻译我就直接贴过来了

在使用android lcoation的时候,可能不希望自己去硬性的选择是GPS服务还是NETWORK服务,可能是我们考虑的因素有很多,自己很难决定,Android SDK提供了一个类Criteria,直译为标准。

在使用android lcoation的时候,可能不希望自己去硬性的

public String getBestProvider (Criteria criteria, boolean enabledOnly)

Since: API Level 1

Returns the name of the provider that best meets the given criteria. Only providers that are permitted to be accessed by the calling activity will be returned. If several providers meet the criteria, the one with the best accuracy is returned. If no provider meets the criteria, the criteria are loosened in the following sequence:

//翻译:返回满足给定的criteria(标准)的最佳provider,(前面一篇文章提到过两种重要provider的区别)。只有当provider权限允许的时候才会返回,如果几个provider均满足criteria设定的标准,最贴近标准的provider将会被返回。如果没有provider满足,标准将按照下面的序列放宽松。

power requirement

accuracy

bearing

speed

altitude

选择是GPS服务还是NETWORK服务,可能是我们考虑的因素有很多,自己很难决定,Android SDK提供了一个类Criteria,直译为标准。

												

手机定位:获取我的位置经纬度相关推荐

  1. vue怎么获取用户的位置经纬度_vue 实现Web端的定位功能 获取经纬度

    首先我这里的需求呢, 是获取当前用户的经纬度 经过无数次的测试, 先后用了 腾讯/百度地图的api,最后绝对还是高德的js APi 废话不多说, 直接上代码. 首先在 index.html 里面 引入 ...

  2. unity 手机上获取手指触摸位置_Unity 操作检测的各种实现#2手机端 - 触屏与手势...

    写在前面 继续填坑了.这次是讲手机端. 电脑端 [ 按我跳转 ] 键盘按键控制 [ 上文内容 ] 鼠标点击控制 [ 上文内容 ] 手机端 触屏控制 [ 本文内容 ] 手势控制 [ 本文内容 ] 重力控 ...

  3. H5地理定位获取用户当前位置、城市

    第一步:需要在百度地图开发者平台创建一个应用:http://lbsyun.baidu.com/apiconsole/key/create 配置信息 申请配置成功以后返回一个AK 第二步:引入百度地图的 ...

  4. 优化小程序中频繁下拉刷新导致的定位获取失败问题

    getLocation() {return new Promise((resolve, reject) => {let that =thiswx.getLocation({type: " ...

  5. 微信小程序弹出用户授权弹窗,微信小程序引导用户授权,获取位置经纬度

    我们在开发小程序时,有些操作必须让用户授权.比如我们获取用户位置,需要用户授权位置信息.授权操作我们需要给用户弹窗提示,在用户禁用某些权限时,又要引导用户去设置页开启相应权限.我们这里就以获取经纬度为 ...

  6. html自动获取用户位置,html5获取用户当前位置

    支持地理定位的浏览器有IE9+.Firefox 3.5+ .Opera 10.6+ .Safari 5+ .Chrome.iOS 版Safari.Android版WebKit. navigator.g ...

  7. Android百度定位获取经纬度

    Android百度定位获取经纬度 一.百度定位误差问题:参考一片文章 http://blog.csdn.net/shaoyezhangliwei/article/details/44830301 1. ...

  8. Android基站定位——通过手机信号获取基站信息

    基站定位原理:通过手机信号获取基站信息,然后调用第三方公开的根据基站信息查找基站的经纬度值,想要具体地址信息的再根据经纬度值获取具体的地址信息. 一.通过手机信号获取基站信息 通过TelephonyM ...

  9. Android基站定位——通过手机信号获取基站信息(一)

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8672442 基站定位原理:通过手机信号获取基站信息,然后调用第三方公开的根据基站信息 ...

最新文章

  1. jMonkey Engine SDK3 中文乱码问题
  2. 选择适合自己的那款操作系统
  3. 【Flask】数据的CRUD之更新和删除操作
  4. vscode如何及时提示flutter代码
  5. java学习_5_23
  6. 数据科学 IPython 笔记本 9.11 结构化数据:NumPy 的结构化数组
  7. 【SpringCloud】服务降级 Hystrix DashBoard
  8. 我们需要一次怎样的数据架构变革?
  9. 添加源代码到你的sdk中
  10. Atitit 2017年第68界机器视觉图像处理学术大会会议记要attilax总结自建学院自颁学位理论
  11. c语言 字符串转浮点型函数
  12. python构造icmp数据包_python – 在scapy中发送ICMP数据包并选择正确的接口
  13. 如何用保险保障自己的一生?
  14. 魔兽TBC常用WA字符串收集
  15. 计算机图形表示的原理
  16. 【笔记整理】vue.js笔记
  17. 良好的编程习惯有哪些?
  18. 无限地图生成的制作,一直跑酷一直爽!
  19. 去年12月份挑错经验总结
  20. 哪个牌子的护眼灯最好?

热门文章

  1. 第十二章 C语言调试_assert断言函数
  2. 30年前竟是一家?Intel/AMD CPU的那些事
  3. 来吧,和我一起进入ubuntu 9.04 超级兔子的世界(解决NTFS挂载问题)
  4. Cobbler Web界面操作(五)
  5. 学习感悟(局部模式的人脸识别研究)
  6. 使用python进行URL编码
  7. 大盘点:抗衰界新星nmn,nmn能改善什么病症
  8. 2008 年网络浏览器市场份额趋势
  9. 自己的CSDN博文阅读量简单分析(至2016年1月)
  10. Oracle碎片简约处理