要使用LocationClient获取位置信息,首先需要在AndroidManifest.xml文件中添加以下权限:

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

然后,在MainActivity.java文件中添加以下代码:

import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_PERMISSION = 1;

    private LocationClient mLocationClient;

    private Handler mHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mHandler = new Handler(Looper.getMainLooper());

        // 初始化LocationClient
        mLocationClient = new LocationClient(getApplicationContext());
        // 设置定位监听器
        mLocationClient.registerLocationListener(new MyLocationListener());

        //获取权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    REQUEST_PERMISSION);
        } else {
            // 已经拥有权限,开始定位
            startLocation();
        }
    }

    /**
     * 开始定位
     */
    private void startLocation() {
        // 开启定位
        mLocationClient.start();

        // 设置定位参数
        LocationClientOption option = new LocationClientOption();
        option.setCoorType("bd09ll");
        option.setIsNeedAddress(true);
        mLocationClient.setLocOption(option);
    }

    /**
     * 停止定位
     */
    private void stopLocation() {
        // 停止定位
        mLocationClient.stop();
    }

    /**
     * 定位回调监听器
     */
    private class MyLocationListener extends BDAbstractLocationListener {

        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            // 在这里处理定位结果
            double latitude = bdLocation.getLatitude(); // 纬度
            double longitude = bdLocation.getLongitude(); // 经度
            String address = bdLocation.getAddrStr(); // 地址

            Log.d("Location", "Latitude: " + latitude);
            Log.d("Location", "Longitude: " + longitude);
            Log.d("Location", "Address: " + address);

            // 停止定位
            stopLocation();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_PERMISSION) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 用户授予了定位权限
                startLocation();
            } else {
                // 用户拒绝了定位权限
                Log.e("Location", "Permission denied");
            }
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 销毁LocationClient
        mLocationClient.unRegisterLocationListener(new MyLocationListener());
        mLocationClient = null;
    }
}

在上面的代码中,我们首先初始化了LocationClient,并注册了一个BDAbstractLocationListener类型的定位监听器,用于获取定位结果。然后,在onCreate方法中,我们首先检查是否拥有定位权限,如果没有,则请求权限;如果已经拥有权限,则调用startLocation方法开始定位。

在定位结果回调的onReceiveLocation方法中,我们可以获取到定位结果的经纬度和地址信息。在这个方法中,我们还调用了stopLocation方法停止定位。

最后,我们在onDestroy方法中销毁LocationClient

使用LocationClient与Runnable获取位置信息

原文地址: https://www.cveoy.top/t/topic/ioTJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录