新手做一个项目,需要百度地图定位,现在在网上找的全都是以前的,运行都出错,有大神有现在能运行的demo吗,求android大神教教我。
1条回答 默认 最新
你知我知皆知 2024-08-04 22:18关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
在Android中使用百度地图API,你需要首先安装Google Play Services,并且获取到你的应用ID和密钥。然后,你可以使用以下代码来实现定位功能:
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_CODE = 100; private LocationClient mLocationClient; private LocationListener locationListener; private String locationKey = "location_key"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取用户授权 if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_CODE); } else { getLocation(); } } /** * 检查权限是否已经授予 * * @param permission 权限名称 */ private boolean checkSelfPermission(String permission) { return ActivityCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED; } /** * 获得用户授权 */ public void requestPermissions(final String[] permissions) { ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE); } /** * 执行请求权限 * * @param requestCode 请求码 * @param permissions 申请权限的列表 * @param grantResults 接受权限结果的列表 */ @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case REQUEST_CODE: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { getLocation(); } else { Toast.makeText(MainActivity.this, "对不起,你没有授予必要的权限", Toast.LENGTH_SHORT).show(); } break; } } } /** * 根据地理位置获取经纬度 */ private void getLocation() { LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 是否开启gps option.setCoorType("bd09ll"); // 设置返回的坐标类型 option.setScanSpan(3000); // 开启高精度模式 option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); // 设定获取位置的方式 mLocationClient = new LocationClient(this); mLocationClient.registerLocationListener(locationListener); mLocationClient.setLocOption(option); // 进行定位操作 mLocationClient.start(); // 等待定位结果 while (!mLocationClient.isStarted()) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } /** * 注册监听器 */ private LocationListener locationListener = new LocationListener() { @Override public void onReceiveLocation(BDLocation bdLocation) { if (bdLocation != null) { double latitude = bdLocation.getLatitude(); // 经度 double longitude = bdLocation.getLongitude(); // 纬度 // 计算当前位置 double distance = calculateDistance(latitude, longitude, bdLocation.getBearing(), bdLocation.getAccuracy()); // 显示位置信息 Toast.makeText(MainActivity.this, "纬度:" + latitude + "\n经度:" + longitude + "\n距离:" + distance + "米", Toast.LENGTH_SHORT).show(); } } private double calculateDistance(double lat1, double lng1, double lat2, double lng2) { double R = 6371; // 地球平均半径,单位为公里 double dLat = Math.toRadians(lat2 - lat1); double dLon = Math.toRadians(lng2 - lng1); double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double distance = R * c * 1000; // 距离,单位为米 return distance; } }; }这段代码将帮助你开始使用百度地图API进行定位。请注意,这个示例需要你在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />此外,确保你的应用程序已获得适当的权限并正确配置了
LocationClientOption对象。解决 无用评论 打赏 举报