Andorid获取原生GPS定位信息

    @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;
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/Android_hv/article/details/125521822