美文网首页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