通过高德与谷歌获取精确坐标

 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.SET_WALLPAPER" />

定位权限

implementation 'com.google.android.gms:play-services-location:18.0.0'
    implementation 'io.github.bmob:android-sdk:3.8.21'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
    implementation 'com.squareup.okhttp3:okhttp:4.8.1'
    implementation 'com.squareup.okio:okio:2.2.2'
    implementation 'com.google.code.gson:gson:2.8.5'

    implementation 'com.amap.api:location:4.7.2'

谷歌与高德的依赖(无谷歌插件的无法使用,不过我在后续的代码将这种异常抹去了)

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            //请求定位权限
            ActivityCompat.requestPermissions(this, new String[]{
                            Manifest.permission.ACCESS_FINE_LOCATION,
                            Manifest.permission.ACCESS_COARSE_LOCATION},
                    REQUEST_LOCATION_PERMISSION_CODE);
        }

请求获取权限,配合后续代码


    // 处理权限请求结果
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case REQUEST_CODE_PERMISSIONS:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    requestLocation();
                } else {
                    Log.e(TAG, "Location permission denied");
                }
                break;
        }
    }

好了你现在获取到定位权限了

fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);

        // 检查Google Play服务是否可用
        GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
        int resultCode = apiAvailability.isGooglePlayServicesAvailable(this);
        if (resultCode != ConnectionResult.SUCCESS) {
            // Google Play服务不可用,尝试修复或提示用户安装
            Log.e(TAG, "Google Play Services error: " + apiAvailability.getErrorString(resultCode));
        } else {
            // Google Play服务可用,检查并申请定位权限
            if (checkPermission()) {
                requestLocation();
            } else {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE_PERMISSIONS);
            }
        }



        // 添加
        if (checkPermission()) {
            requestLocation();
        }

确定Google是否可用

// 检查定位权限是否已授权
    private boolean checkPermission() {
        return ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
    }

    // 申请定位权限
    private void requestLocation() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }
        fusedLocationProviderClient.getLastLocation()
                .addOnCompleteListener(new OnCompleteListener<Location>() {
                    @Override
                    public void onComplete(@NonNull Task<Location> task) {
                        if (task.isSuccessful() && task.getResult() != null) {
                            Location location = task.getResult();
                            double latitude = location.getLatitude(); // 获取纬度
                            double longitude = location.getLongitude(); // 获取经度
                            double northLatitude = 90 - latitude; // 获取对应的北纬坐标

                            Log.d(TAG, "latitude: " + latitude);
                            Log.d(TAG, "longitude: " + longitude);
                            Log.d(TAG, "northLatitude: " + northLatitude);



                        } else {
                            // 获取位置信息失败,进行相应处理
                            Log.e(TAG, "Error getting location: " + task.getException());
                        }
                    }
                });


        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);


        Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        if (location != null) {
            latitude2 = location.getLatitude();
            longitude2 = location.getLongitude();

            // 将经纬度信息展示在Logcat中
            Log.d("MainActivity", "latitude: " + latitude2 + ", longitude: " + longitude2);

        }
    }

打印的Log中得到谷歌获取到的经度纬度与北纬,打印得到高德获取的经纬与北纬

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值