百度地图定位Demo以及我遇到的一些问题

    xiaoxiao2024-11-04  68

    文章目录

    环境配置修改acticity_main文件java目录结构效果图我遇到的问题下载链接

    实训帮老师做一个汽车徽标识别的软件,里面有个地图模块是我负责的。

    环境配置
    导入jar包和so包 下载地址 只需要下载基础地位和基础定位就行 如下图所示,把jar包放在lib里面,然后右键添进工程里面 在main目录下创建目录,jniLibs,把那五个目录拷过去 这个project视图 申请key 按照百度文档里面的就可以了,很简单的。 地址配置mainfest.xml文件 我直接粘出来吧,注意把key改成自己的key <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="cn.edu.zut.mapsunday"> //获取设备网络状态,禁用后无法获取网络状态 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> //网络权限,当禁用后,无法进行检索等相关业务 <uses-permission android:name="android.permission.INTERNET" /> //读取设备硬件信息,统计数据 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> //读取系统信息,包含系统版本等信息,用作统计 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> //获取设备的网络状态,鉴权所需网络代理 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> //允许sd卡写权限,需写入地图数据,禁用后无法显示地图 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> //这个权限用于进行网络定位 <uses-permission android:name="android.permission.WRITE_SETTINGS" tools:ignore="ProtectedPermissions" /> //这个权限用于访问GPS定位 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> //获取统计数据 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> //使用步行AR导航,配置Camera权限 <uses-permission android:name="android.permission.CAMERA" /> //程序在手机屏幕关闭后后台进程仍然运行 <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- 这个权限用于进行网络定位 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 这个权限用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <application android:name=".Application.DemoApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> //配置应用的AppKey,唯一的,需申请 <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="B3nBPftcTeMNnurfG7UWaTB4ZsODGsVr" /> //service组件,固定配置 <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service> </application> </manifest>
    修改acticity_main文件
    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="cn.edu.zut.mapsunday.MainActivity"> <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true"></com.baidu.mapapi.map.MapView> </RelativeLayout>
    java目录结构

    注意,这样的目录结构需要在mainfest里面添加android:name=".Application.DemoApplication"这样一句,初始化什么定西吧,具体我也不知道。

    DemoApplication package cn.edu.zut.mapsunday.Application; import android.app.Application; import com.baidu.mapapi.CoordType; import com.baidu.mapapi.SDKInitializer; public class DemoApplication extends Application { @Override public void onCreate() { super.onCreate(); //在使用SDK各组件之前初始化context信息,传入ApplicationContext SDKInitializer.initialize(this); //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型. //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。 SDKInitializer.setCoordType(CoordType.BD09LL); } } MainActivity package cn.edu.zut.mapsunday; import android.app.Activity; import android.os.Bundle; import com.baidu.location.BDAbstractLocationListener; import com.baidu.location.BDLocation; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.CoordType; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.LogoPosition; import com.baidu.mapapi.map.MapStatus; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.map.UiSettings; import com.baidu.mapapi.model.LatLng; public class MainActivity extends Activity { boolean isFirstLoc = true; private MapView mMapView = null; private BaiduMap mBaiduMap = null; private LocationClient mLocationClient = null; private UiSettings mUiSettings = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取地图控件引用 mMapView = findViewById(R.id.bmapView); mMapView.setLogoPosition(LogoPosition.logoPostionRightBottom); mMapView.showScaleControl(false); mBaiduMap = mMapView.getMap(); mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); mBaiduMap.setIndoorEnable(true); mUiSettings = mBaiduMap.getUiSettings(); mUiSettings.setCompassEnabled(true);// 是否显示指南针 mUiSettings.setScrollGesturesEnabled(true);// 是否能平移 mUiSettings.setOverlookingGesturesEnabled(false); mBaiduMap.setMyLocationEnabled(true); //定位初始化 mLocationClient = new LocationClient(this); //通过LocationClientOption设置LocationClient相关参数 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 打开gps option.setCoorType("bd09ll"); // 设置坐标类型 option.setScanSpan(1000); //设置locationClientOption mLocationClient.setLocOption(option); //注册LocationListener监听器 MyLocationListener myLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(myLocationListener); //开启地图定位图层 mLocationClient.start(); mLocationClient.requestLocation(); } @Override protected void onResume() { mMapView.onResume(); super.onResume(); } @Override protected void onPause() { mMapView.onPause(); super.onPause(); } @Override protected void onDestroy() { mLocationClient.stop(); mBaiduMap.setMyLocationEnabled(false); mMapView.onDestroy(); mMapView = null; super.onDestroy(); } public class MyLocationListener extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation location) { //mapView 销毁后不在处理新接收的位置 if (location == null || mMapView == null){ return; } MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(location.getDirection()).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); if(isFirstLoc){ isFirstLoc = false; LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); MapStatus.Builder builder = new MapStatus.Builder(); builder.target(ll).zoom(18.0f); mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); } } } }
    效果图

    我遇到的问题

    galaxy lib host missing meta-data,make sure you know the right way to integrate galaxy

    这个问题也是卡了我很久,网上怎么说的都有。我的是放在真机上就没有问题了,希望你们都不要遇到这种问题。

    下载链接

    我是链接

    最新回复(0)