当前位置:   article > 正文

Android开发之原生定位的方法(GPS,网络定位)_android开发,不依赖第三方定位

android开发,不依赖第三方定位

话不多说,直接代码:

注意:此经纬度和第三方地图的经纬度不是一个经纬度

例如此经纬度longitude:116.426676  latitude:39.932821精确位置40.0海拔0.0

在原生GPS代表地址:北京市北京市东城区东四十条3号中汇广场港澳中心-商务楼

但是在百度地图代表地址:北京市东城区东四三条乙69号

为什么呢?因为经纬度换算不一样导致的

  1. package com.qfy.locationdemo;
  2. import android.location.Address;
  3. import android.location.Criteria;
  4. import android.location.Geocoder;
  5. import android.location.Location;
  6. import android.location.LocationListener;
  7. import android.location.LocationManager;
  8. import android.support.v7.app.AppCompatActivity;
  9. import android.os.Bundle;
  10. import android.util.Log;
  11. import android.widget.TextView;
  12. import android.widget.Toast;
  13. import java.io.IOException;
  14. import java.util.List;
  15. public class MainActivity extends AppCompatActivity {
  16. private LocationManager locationManager;
  17. private TextView tvLongitude;
  18. private MyLocationListener myLocationListener;
  19. private TextView locationChange;
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.activity_main);
  24. tvLongitude = (TextView) findViewById(R.id.tv_longitude);
  25. locationChange = (TextView) findViewById(R.id.location_change);
  26. // locationChange.setOnClickListener(new View.OnClickListener() {
  27. // @Override
  28. // public void onClick(View v) {
  29. // new Thread() {
  30. // @Override
  31. // public void run() {
  32. // String location = GetHuoxingLocation.getLocation(MainActivity.this);
  33. // tvLongitude.setText(location);
  34. // }
  35. // }.start();
  36. // }
  37. // });
  38. //1.获取位置的管理者
  39. locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
  40. //2.获取定位方式
  41. //2.1获取所有的定位方式,true:表示返回所有可用定位方式
  42. List<String> providers = locationManager.getProviders(true);
  43. for (String string : providers) {
  44. System.out.println(string);
  45. }
  46. //2.2获取最佳的定位方式
  47. Criteria criteria = new Criteria();
  48. criteria.setAltitudeRequired(true);//设置是否可以定位海拔,如果设置定位海拔,返回一定是gps
  49. //criteria : 设置定位属性
  50. //enabledOnly : true如果定位可用就返回
  51. String bestProvider = locationManager.getBestProvider(criteria, false);
  52. System.out.println("最佳的定位方式:" + bestProvider);
  53. //3.定位
  54. myLocationListener = new MyLocationListener();
  55. //provider : 定位的方式
  56. //minTime : 定位的最小时间间隔
  57. //minDistance : 定位最小的间隔距离
  58. //LocationListener : 定位监听
  59. locationManager.requestLocationUpdates("network", 0, 0, myLocationListener);
  60. }
  61. private class MyLocationListener implements LocationListener {
  62. private String latLongString;
  63. //当定位位置改变的调用的方法
  64. //Location : 当前的位置
  65. @Override
  66. public void onLocationChanged(Location location) {
  67. float accuracy = location.getAccuracy();//获取精确位置
  68. double altitude = location.getAltitude();//获取海拔
  69. final double latitude = location.getLatitude();//获取纬度,平行
  70. final double longitude = location.getLongitude();//获取经度,垂直
  71. tvLongitude.setText("longitude:" + longitude + " latitude:" + latitude + "精确位置" + accuracy + "海拔" + altitude);
  72. Log.e("打印经纬度:", "longitude:" + longitude + " latitude:" + latitude + "精确位置" + accuracy + "海拔" + altitude);
  73. new Thread(new Runnable() {
  74. @Override
  75. public void run() {
  76. List<Address> addsList = null;
  77. Geocoder geocoder = new Geocoder(MainActivity.this);
  78. try {
  79. addsList = geocoder.getFromLocation(latitude, longitude, 10);//得到的位置可能有多个当前只取其中一个
  80. Log.e("打印拿到的城市", addsList.toString());
  81. } catch (IOException e) {
  82. e.printStackTrace();
  83. }
  84. if (addsList != null && addsList.size() > 0) {
  85. for (int i = 0; i < addsList.size(); i++) {
  86. final Address ads = addsList.get(i);
  87. latLongString = ads.getLocality();//拿到城市
  88. // latLongString = ads.getAddressLine(0);//拿到地址
  89. runOnUiThread(new Runnable() {
  90. @Override
  91. public void run() {
  92. Log.e("打印拿到的城市的地址", latLongString + ads.getAddressLine(0) + ads.getAddressLine(1) + ads.getAddressLine(4));
  93. locationChange.setText(latLongString + ads.getAddressLine(0) + ads.getAddressLine(1));
  94. Toast.makeText(MainActivity.this, "当前所在的城市为" + latLongString + ads.getAddressLine(0) + ads.getAddressLine(4) + ads.getAddressLine(1), Toast.LENGTH_LONG).show();
  95. }
  96. });
  97. }
  98. }
  99. }
  100. }).start();
  101. }
  102. //当定位状态发生改变的时候调用的方式
  103. @Override
  104. public void onStatusChanged(String provider, int status, Bundle extras) {
  105. // TODO Auto-generated method stub
  106. }
  107. //当定位可用的时候调用的方法
  108. @Override
  109. public void onProviderEnabled(String provider) {
  110. // TODO Auto-generated method stub
  111. }
  112. //当定位不可用的时候调用的方法
  113. @Override
  114. public void onProviderDisabled(String provider) {
  115. // TODO Auto-generated method stub
  116. }
  117. }
  118. @Override
  119. protected void onDestroy() {
  120. super.onDestroy();
  121. locationManager.removeUpdates(myLocationListener);//关闭gps,但是高版本中规定打开和关闭gps必须由用户自己主观的去实现,代码已经不允许进行操作
  122. }
  123. }

咱们来看下定位的效果图:

 

如果需要源码可点击下面下载:

源码下载

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/290517
推荐阅读
相关标签
  

闽ICP备14008679号