Android 使用LocationClient与Runnable获取位置信息 - Baidu地图定位教程
"使用LocationClient获取位置信息,首先需要在AndroidManifest.xml文件中添加以下权限:\n`<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />\n\<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />\n\n然后,在MainActivity.java文件中添加以下代码:\n\java\nimport android.Manifest;\nimport android.content.pm.PackageManager;\nimport android.location.Location;\nimport android.os.Bundle;\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\nimport androidx.appcompat.app.AppCompatActivity;\nimport androidx.core.app.ActivityCompat;\nimport androidx.core.content.ContextCompat;\n\nimport com.baidu.location.BDAbstractLocationListener;\nimport com.baidu.location.BDLocation;\nimport com.baidu.location.LocationClient;\nimport com.baidu.location.LocationClientOption;\n\npublic class MainActivity extends AppCompatActivity {\n\n private static final int REQUEST_PERMISSION = 1;\n\n private LocationClient mLocationClient;\n\n private Handler mHandler;\n\n @Override\n protected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n setContentView(R.layout.activity_main);\n\n mHandler = new Handler(Looper.getMainLooper());\n\n // 初始化LocationClient\n mLocationClient = new LocationClient(getApplicationContext());\n // 设置定位监听器\n mLocationClient.registerLocationListener(new MyLocationListener());\n\n //获取权限\n if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)\n != PackageManager.PERMISSION_GRANTED) {\n ActivityCompat.requestPermissions(this,\n new String[]{Manifest.permission.ACCESS_FINE_LOCATION},\n REQUEST_PERMISSION);\n } else {\n // 已经拥有权限,开始定位\n startLocation();\n }\n }\n\n /\n * 开始定位\n */\n private void startLocation() {\n // 开启定位\n mLocationClient.start();\n\n // 设置定位参数\n LocationClientOption option = new LocationClientOption();\n option.setCoorType("bd09ll");\n option.setIsNeedAddress(true);\n mLocationClient.setLocOption(option);\n }\n\n /\n * 停止定位\n */\n private void stopLocation() {\n // 停止定位\n mLocationClient.stop();\n }\n\n /**\n * 定位回调监听器\n */\n private class MyLocationListener extends BDAbstractLocationListener {\n\n @Override\n public void onReceiveLocation(BDLocation bdLocation) {\n // 在这里处理定位结果\n double latitude = bdLocation.getLatitude(); // 纬度\n double longitude = bdLocation.getLongitude(); // 经度\n String address = bdLocation.getAddrStr(); // 地址\n\n Log.d("Location", "Latitude: " + latitude);\n Log.d("Location", "Longitude: " + longitude);\n Log.d("Location", "Address: " + address);\n\n // 停止定位\n stopLocation();\n }\n }\n\n @Override\n public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {\n super.onRequestPermissionsResult(requestCode, permissions, grantResults);\n if (requestCode == REQUEST_PERMISSION) {\n if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {\n // 用户授予了定位权限\n startLocation();\n } else {\n // 用户拒绝了定位权限\n Log.e("Location", "Permission denied");\n }\n }\n }\n\n @Override\n protected void onDestroy() {\n super.onDestroy();\n // 销毁LocationClient\n mLocationClient.unRegisterLocationListener(new MyLocationListener());\n mLocationClient = null;\n }\n}\n`\n在上面的代码中,我们首先初始化了LocationClient,并注册了一个BDAbstractLocationListener类型的定位监听器,用于获取定位结果。然后,在onCreate方法中,我们首先检查是否拥有定位权限,如果没有,则请求权限;如果已经拥有权限,则调用startLocation方法开始定位。\n\n在定位结果回调的onReceiveLocation方法中,我们可以获取到定位结果的经纬度和地址信息。在这个方法中,我们还调用了stopLocation方法停止定位。\n\n最后,我们在onDestroy方法中销毁LocationClient。
原文地址: https://www.cveoy.top/t/topic/p6Jf 著作权归作者所有。请勿转载和采集!