@SuppressLint("MissingPermission") @TargetApi(Build.VERSION_CODES.M) public Location getLocationInfo(Context context) { locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); // 默认Android GPS定位实例 //用来存储最优的结果 // Location betterLocation = null; //判断是否开启位置服务,没有则跳转至设置来开启 if (isLocationServiceOpen()) { //获取所有支持的provider List<String> providers = locationManager.getProviders(true); for (String provider : providers) { Location location1 = locationManager.getLastKnownLocation(provider); if (location1 != null){ Log.i("TAG", "$provider 精度为:${it.accuracy}"); if (location == null) { location = location1; } else { //因为半径等于精度,所以精度越低代表越准确 if (location1.getAccuracy() < location.getAccuracy()) location1 = location; } } if (location1 == null) { Log.i("TAG", "$provider 获取到的位置为null"); } } if (location!=null){ Log.i("TAG", "精度最高的获取方式:"+location.getProvider()+" 经度:"+location.getLongitude()+" 纬度:"+location.getLatitude()); } //设置间隔两秒获得一次GPS定位信息 locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 8, new LocationListener() { @Override public void onLocationChanged(Location location1) { // 当GPS定位信息发生改变时,更新定位 location = location1; } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { // 当GPS LocationProvider可用时,更新定位 location = locationManager.getLastKnownLocation(provider); } @Override public void onProviderDisabled(String provider) { // updateShow(null); } }); //(四)若所支持的provider获取到的位置均为空,则开启连续定位服务 // if (betterLocation == null) { // for (String provider : providers) { locationMonitor(provider); // } // Log.i("TAG", "getLocationInfo: 获取到的经纬度均为空,已开启连续定位监听"); // } } else { Log.i("TAG", "请跳转到系统设置中打开定位服务"); } return location; } @SuppressLint("MissingPermission") private void locationMonitor(String provider) { // if (PermissionUtil.requestPermission( // 1, // permissionList.toList(), // this // ) // ) { locationManager.requestLocationUpdates(provider, (long) 6000, (float) 8, locationListener); // } } private LocationListener locationListener =new LocationListener() { @Override public void onLocationChanged(Location location) { //调用更新位置 // updateToNewLocation(location); } @Override public void onStatusChanged(String s, int i, Bundle bundle) { } @Override public void onProviderEnabled(String s) { } @Override public void onProviderDisabled(String s) { } }; /** * 判断定位服务是否开启 */ private boolean isLocationServiceOpen() { boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); //有一个开启就可 return gps || network; } class PermissionUtil { /** * 验证是否有权限,没有则申请 */ public Boolean requestPermission(int requestCode , List<String> permissionList, Activity context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //没有同意需要申请的权限 List<String> requestPermissionList = new ArrayList(); for (String permission : permissionList) { if (ContextCompat.checkSelfPermission( context, permission ) != PackageManager.PERMISSION_GRANTED ) { requestPermissionList.add(permission); } } if (requestPermissionList.size() > 0) { ActivityCompat.requestPermissions( context, requestPermissionList.toArray(new String[]{}), requestCode ); return false; } else { return true; } } else { return true; } } /** *验证权限申请的结果 */ public boolean verifyResult(int[] grantResults,Context context) { if (grantResults.length>=0) { for (int result : grantResults) { if (result != PackageManager.PERMISSION_GRANTED) { Toast.makeText(context, "必须同意所有权限才能使用该功能", Toast.LENGTH_SHORT).show(); return false; } } return true; } else { Toast.makeText(context, "发生未知错误", Toast.LENGTH_SHORT).show(); return false; } } }
Andorid获取原生GPS定位信息
猜你喜欢
转载自blog.csdn.net/Android_hv/article/details/125521822
今日推荐
周排行