Andorid はネイティブ GPS 位置情報を取得します

    @SuppressLint("MissingPermission")
    @TargetApi(Build.VERSION_CODES.M)
    public Location getLocationInfo(Context context) {
        locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); //デフォルトの Android GPS 測位インスタンス

        //最適な結果を保存するために使用されます
// 場所 betterLocation = null;
        //位置情報サービスがオンになっているかどうかを確認します。オンになっていない場合は、設定に移動してオンにします。
        if (isLocationServiceOpen()) {
            // サポートされているすべてのプロバイダーを取得します
            List<String> プロバイダー = locationManager.getProviders(true);
            for (文字列プロバイダー:プロバイダー) {
                場所 location1 = locationManager.getLastKnownLocation(provider);
                if (location1 != null){
                    Log.i("TAG", "$provider の精度は ${it.accuracy}");
                    if (場所 == null) {
                        場所 = 場所1;
                    } それ以外 {
                        //半径は精度と等しいため、精度が低いほど正確になります。
                        if (location1.getAccuracy() < location.getAccuracy())
                            location1 = 場所;
                    }
                }

                if (location1 == null) {
                    Log.i("TAG", "$provider によって取得された場所は null");
                }
            }

            if (場所!=null){
                Log.i("TAG", "最も正確な取得方法: "+location.getProvider()+" 経度: "+location.getLongitude()+" 緯度: "+location.getLatitude());
            }
            //GPS位置情報の取得間隔を2秒に設定
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 8, new LocationListener() {
                @オーバーライド
                public void onLocationChanged(場所 location1) {
                    //GPS測位情報が変化した場合、測位を更新する
                    場所 = 場所1;
                }

                @オーバーライド
                public void onStatusChanged(String Provider, int status, Bundle extras) {

                }

                @オーバーライド
                public void onProviderEnabled(String プロバイダ) {
                    //GPS LocationProvider が利用可能な場合に位置情報を更新します
                    location = locationManager.getLastKnownLocation(プロバイダー);
                }

                @オーバーライド
                public void onProviderDisabled(String プロバイダ) {
// updateShow(null);
                }
            });

            // (4) サポートされているプロバイダーによって取得された位置がすべて空の場合、継続測位サービスが有効になります。
// if (betterLocation == null) {
// for (文字列プロバイダー:プロバイダー) {
                    locationMonitor(プロバイダー);
// }
// Log.i("TAG", "getLocationInfo: 取得した経度、緯度は空です、継続測位監視が有効になっています");
// }
        } それ以外 {
            Log.i("TAG", "システム設定に移動して位置情報サービスをオンにしてください");

        }
        返却場所。
    }
    @SuppressLint("MissingPermission")
    private void locationMonitor(文字列プロバイダー) {
// if (PermissionUtil.requestPermission(
// 1、
// 許可リスト.toList(),
// これ
//)
// ) {
            locationManager.requestLocationUpdates(provider, (long) 6000, (float) 8, locationListener);
// }

    }

    private LocationListener locationListener =new LocationListener() {
        @オーバーライド
        public void onLocationChanged(位置情報) {
            //更新場所を呼び出す
// updateToNewLocation(場所);
        }

        @オーバーライド
        public void onStatusChanged(String s, int i, Bundle バンドル) {

        }

        @オーバーライド
        public void onProviderEnabled(String s) {

        }

        @オーバーライド
        public void onProviderDisabled(String s) {

        }
    };



    /**
     * 測位サービスがオンになっているかどうかを確認します
     */
    プライベートブール値 isLocationServiceOpen() {
        boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        ブール値ネットワーク = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        // 一つだけ開いてください
        GPS を返します || 通信網;
    }

    クラス 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 (文字列権限:permissionList) {
                    if (ContextCompat.checkSelfPermission(
                            コンテクスト、
                            許可
                    ) != PackageManager.PERMISSION_GRANTED
                    ) {
                        requestPermissionList.add(許可);
                    }
                }
                if (requestPermissionList.size() > 0) {
                    ActivityCompat.requestPermissions(
                            コンテクスト、
                            requestPermissionList.toArray(new String[]{}),
                            リクエストコード
                    );
                    false を返します。
                } それ以外 {
                    true を返します。
                }
            } それ以外 {
                true を返します。
            }
        }

        /**
         ※許可申請結果の確認
         */
        public boolean verifyResult(int[]grantResults,Context context) {
            if (grantResults.length>=0) {
                for (int result :grantResults) {
                    if (結果 != PackageManager.PERMISSION_GRANTED) {
                        Toast.makeText(context, "この関数を使用するにはすべてのアクセス許可に同意する必要があります", Toast.LENGTH_SHORT).show();
                        false を返します。
                    }
                }
                true を返します。
            } それ以外 {
                Toast.makeText(context, "不明なエラーが発生しました", Toast.LENGTH_SHORT).show();
                false を返します。
            }
        }
    }

おすすめ

転載: blog.csdn.net/Android_hv/article/details/125521822