美文网首页Android开发经验谈程序员
一、android集成百度地图(android百度地图SDK系列

一、android集成百度地图(android百度地图SDK系列

作者: 猫儿不吃鱼鱼 | 来源:发表于2017-10-09 13:02 被阅读0次

总所周知,百度地图SDK是出了名的X,他的隔壁邻居高德简直就是良心。但是很多时候用哪个并不是我们自己能左右的。这不,新项目必须使用百度地图(我:老板,能用高德吗?老板:不能。我:一万只。。你们懂)。算了,硬着上,在此做个总结以防后来人踩坑,百度地图不良心但是我有良心啊(机智)。

一、android集成百度地图(android百度地图SDK系列)
二、android百度地图定位显示当前位置(android百度地图SDK系列)
三、android百度地图覆盖物(android百度地图SDK系列)

一、申请密钥

这里我就不罗里吧嗦的,相信你们都可以跟着百度地图SDK搞定。
奉上地址:百度地图SDK申请密钥

二、配置环境

首先我们去下载需要的开发包,地址:百度地图开发包下载
然后把jar包放入app目录下libs文件夹里面,并且右键Add As Library。随后在main目录下新建一个jniLibs文件夹,把so文件放进去。最后配置如下图:

百度地图SDK配置图

三、显示地图

1.经过以上两步,地图SDK最基本的工作已经做完了,接下来就要对代码进行一些初始化编写来显示地图。
首先在AndroidManifest.xml配置文件里进行配置:

//添加开发密钥
<application>  
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="开发者 key" />  
</application>

//添加所需权限
<!--允许程序打开网络套接字-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--允许程序设置内置sd卡的写权限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!--允许程序获取网络状态-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--允许程序访问WiFi网络信息-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!--允许程序读写手机状态和身份-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!--用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!--用于申请调用A-GPS模块-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
    <!--用于申请获取蓝牙信息进行室内定位-->
    <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

以上,对于AndroidManifest.xml的配置就完成了,但是值得注意的是,如果需要用到间隔定位功能(每隔n秒定位一次),则需要多配置一个service。这也算是踩的一个坑,我做间隔定位的时候死活不行,看遍了百度地图api都没有找到对应的解决方法,最后搜了好久才解决了这个问题,再次鄙视百度地图api。service配置如下:

<!-- 百度地图 间隔定位必须配置此service否则功能无效-->
<service android:name="com.baidu.location.f"
    android:enabled="true"
    android:process=":remote"/>

由于我的so文件是用了arm64-v8a,armeabi-v7a,x86所以在build.gradle里额外配置一句:

ndk {
    // 设置支持的SO库架构
    abiFilters 'arm64-v8a','armeabi-v7a','x86'
}

2.在我们的布局文件里面添加百度地图控件:

<com.baidu.mapapi.map.MapView
    android:id="@+id/bmapView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

3.新建一个全局的MyApplication类进行初始化,并将其配置进AndroidManifest.xml文件里:

SDKInitializer.initialize(getApplicationContext());

至此,所有的工作都已经做完了,我们来看看运行效果:


运行效果

到此为止一个最基本的百度地图就显示出来了,其它功能会在后续的文章中陆续写出来。最后为了防止有小白菜级别的同学,我把所有代码都贴出来↓
AndroidManifest.xml配置文件代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.app.baidu">

    <!--允许程序打开网络套接字-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--允许程序设置内置sd卡的写权限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!--允许程序获取网络状态-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--允许程序访问WiFi网络信息-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!--允许程序读写手机状态和身份-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!--用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!--用于申请调用A-GPS模块-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
    <!--用于申请获取蓝牙信息进行室内定位-->
    <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    <application
        android:name=".application.MyApplication"
        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">

        <!-- 百度地图 -->
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="tmt2PZ01MZqzMDBmEIwi56R4RgvG596o" />

        <activity android:name=".ui.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- 百度地图 间隔定位必须配置此service否则功能无效-->
        <service android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote"/>

    </application>

</manifest>

布局文件代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>

MyApplication类代码:

public class MyApplication extends Application{

    @Override
    public void onCreate() {
        super.onCreate();
        //百度地图SDK的全局初始化
        SDKInitializer.initialize(getApplicationContext());
    }
}

MainActivity类代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

相关文章

网友评论

    本文标题:一、android集成百度地图(android百度地图SDK系列

    本文链接:https://www.haomeiwen.com/subject/xqguyxtx.html