王建新 2015-12-02 07:55 采纳率: 0%
浏览 1290

android百度地图定位,最新的怎么弄

新手做一个项目,需要百度地图定位,现在在网上找的全都是以前的,运行都出错,有大神有现在能运行的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对象。

    评论

报告相同问题?