zoukankan      html  css  js  c++  java
  • Android笔记之使用LocationManager获取经纬度

    LocationManager.getLastKnownLocation(String provider)有可能返回null,概率还挺高

            findViewById(R.id.llMain).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    AndPermission.with(MainActivity.this).runtime().permission(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION)
                            .onGranted(new Action<List<String>>() {
                                @Override
                                public void onAction(List<String> data) {
                                    boolean fineLocationPermissionGranted = PermissionChecker.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
                                    boolean coarseLocationPermissionGranted = PermissionChecker.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;
                                    if (fineLocationPermissionGranted && coarseLocationPermissionGranted) {
                                        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
                                        Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                                        if (location == null) {
                                            new AlertDialog.Builder(MainActivity.this).setMessage("无法获取位置").show();
                                        } else {
                                            double longitude = location.getLongitude();
                                            double latitude = location.getLatitude();
                                            Log.d(TAG, longitude + ", " + latitude);
                                            new AlertDialog.Builder(MainActivity.this).setMessage("经度:" + longitude + "
    纬度:" + latitude).show();
                                        }
                                    }
                                }
                            })
                            .onDenied(new Action<List<String>>() {
                                @Override
                                public void onAction(List<String> data) {
                                    new AlertDialog.Builder(MainActivity.this).setMessage("位置权限被拒绝").show();
                                }
                            }).start();
                }
            });

    以下是通过requestSingleUpdate获取经纬度,不过,LocationManager.requestSingleUpdate是异步的,获取到Location的时间不好控制,如果对经纬度的要求不是必须的,还是建议使用第一种

            findViewById(R.id.btnGetLongitudeAndLatitude).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    AndPermission.with(MainActivity.this).runtime().permission(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION)
                            .onGranted(new Action<List<String>>() {
                                @Override
                                public void onAction(List<String> data) {
                                    boolean fineLocationPermissionGranted = PermissionChecker.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
                                    boolean coarseLocationPermissionGranted = PermissionChecker.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;
                                    if (fineLocationPermissionGranted && coarseLocationPermissionGranted) {
                                        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
                                        locationManager.requestSingleUpdate(LocationManager.NETWORK_PROVIDER, new LocationListener() {
                                            @Override
                                            public void onLocationChanged(Location location) {
                                                double longitude = location.getLongitude();
                                                double latitude = location.getLatitude();
                                                Log.d(TAG, longitude + ", " + latitude);
                                                new AlertDialog.Builder(MainActivity.this).setMessage("经度:" + longitude + "
    纬度:" + latitude).show();
                                            }
    
                                            @Override
                                            public void onStatusChanged(String provider, int status, Bundle extras) {
    
                                            }
    
                                            @Override
                                            public void onProviderEnabled(String provider) {
    
                                            }
    
                                            @Override
                                            public void onProviderDisabled(String provider) {
    
                                            }
                                        }, null);
                                    } else {
                                        new AlertDialog.Builder(MainActivity.this).setMessage("位置权限被拒绝").show();
                                    }
                                }
                            })
                            .onDenied(new Action<List<String>>() {
                                @Override
                                public void onAction(List<String> data) {
                                    new AlertDialog.Builder(MainActivity.this).setMessage("位置权限被拒绝").show();
                                }
                            }).start();
                }
            });
  • 相关阅读:
    Thinkphp5.0 模型hasOne、hasMany、belongsTo详解
    ES6中async和await说明和用法
    必会SQL练习题
    Git初识学习
    CI框架简单使用
    JavaScript 的 this 原理
    javascript实现游戏贪吃蛇
    js清除childNodes中的#text(选项卡中会用到获取第一级子元素)
    JavaNIO
    MongoDB入门_shell基本操作
  • 原文地址:https://www.cnblogs.com/buyishi/p/10557677.html
Copyright © 2011-2022 走看看