欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android studio实现地图定位

程序员文章站 2022-03-07 14:16:00
...

项目相关

项目功能

能在地图上显示经纬度以及自身所在地区

结果截图

因为在AVD模拟器上运行会出现定位失败的问题,所以我尝试了真机模拟
Android studio实现地图定位

项目源码

GitHub: 点此跳转

参考文档

百度地图官方文档: 点此跳转
blog:点此跳转

核心代码

  • 判断是否有ACCESS_COARSE_LOCATION权限,动态请求用户允许使用该权限
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
	ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
}
else {
	prepareLocatingService();
}
  • 初始化,以及保存定位参数
private void initLocation() {  
        mLocationClient = new LocationClient(getApplicationContext());
        mLocationClient.registerLocationListener(new MyLocationListener());
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);

        mapView = findViewById(R.id.bmapView);
        baiduMap = mapView.getMap();
        tv_Lat = findViewById(R.id.tv_Lat);
        tv_Lon = findViewById(R.id.tv_Lon);
        tv_Add = findViewById(R.id.tv_Add);

        LocationClientOption option = new LocationClientOption();
        //设置扫描时间间隔
        option.setScanSpan(1000);
        //设置定位模式
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        //保存定位参数
        mLocationClient.setLocOption(option);
    }
  • 管理各部分的生命周期
    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        mapView.onResume();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mLocationClient.stop();
        mapView.onDestroy();
    }

真机模拟

  1. 将手机和电脑通过数据线连接,并选择传输文件
    Android studio实现地图定位
  2. 进入手机上的开发者模式,并打开USB调试,各个手机打开方式可能不一样,就不具体说明了
  3. 打开AS,这时手机上会有提示框,询问是否允许USB调试,点击确定即可
  4. 进入as之后会出现自己的手机,运行程序就可以进行真机模拟了
    Android studio实现地图定位

所遇问题

  • as配置时
    • 获取SHA1的时候我的debug.keystore和老师的位置不一样,然后我通过全局搜索debug.keystore才找到
    • 在Application标签中声明定位的service组件时,报错了,经过百度之后发现,我的开发包中没有包含基本定位功能

Android studio实现地图定位

  • 运行时
    • 出现了定位不准的问题,显示的定位仍然是北京,后来经过调试发现是定位失败的问题
      Android studio实现地图定位
      再进一步研究发现可能是AVD模拟器没有网络导致的,但是经过各种尝试我也没成功使模拟器连上网,最后迫于无奈选择了真机模拟