• 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;
                }
            }
        }
  • 相关阅读:
    【Linux基础】第29讲 Linux用户和用户组权限控制命令(一)
    CY3/CY5/CY7标记牛血清白蛋白/人血清白蛋白,CY3/CY5/CY7-BSA/HSA
    弱项分析与提高举措
    【Python】3.python实现图片上传到阿里云OSS
    STM32的ADC用法-CubeMX
    第二章 经典同步练习作业
    从设备树(dtb格式数据)中解析出bootargs
    linux 创建全局快捷方式
    全网最详细解读《GIN-HOW POWERFUL ARE GRAPH NEURAL NETWORKS》!!!
    博途PLC 1200/1500PLC开放式以太网通信TSEND_C通信(UDP)
  • 原文地址:https://blog.csdn.net/Android_hv/article/details/125521822