手记

Android Studio加载百度地图遇到的BUG以及流程

参照API和自己添加的写法以及顺序

1.下载Android地图api以及demo

2.申请Key

3.studio配置:
一、
在工程app/libs目录下放入baidumapapi_vX_X_X.jar包(特别注意版本必须一样)
二、在src/main/目录下新建jniLibs目录(
看着百度的讲解容易乱、并且容易出错);建好jniLibs要把libs中的.so和jar包引用到里面,在build.gradle(app),如下:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    sourceSets {
        main {
            jniLibs.srcDir 'libs'
        }
    }
    defaultConfig {
        applicationId "loc.hanwei.com"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

4.配置好环境进入开发,需要在AndroidManifest.xml中进行配置Key、service等;如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="loc.hanwei.com">

    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <!-- 这个权限用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- 这个权限用于访问GPS定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 用于读取手机当前的状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 访问网络,网络定位需要上网 -->
    <uses-permission android:name="android.permission.INTERNET" />

    <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="false"
        android:resizeable="true"
        android:smallScreens="true" />

    <uses-feature android:glEsVersion="0x00020000" android:required="true" />

    <application
         android:name=".LocDemoApplication"//在使用SDK各组件之前初始化context信息,所有我们再次调用SDKInitializer.initialize(getApplicationContext());       
         android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="1G5hhFOAehNtYKdgGmQu9apes2nUDKWq" />


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

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

        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
        </service>
    </application>

</manifest>

5.调用SDKInitializer.initialize(getApplicationContext())

/**
 * 
 * Created by 陈苗辉 on 2017/2/13.
 */
public class LocDemoApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        // 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
        SDKInitializer.initialize(getApplicationContext());
    }
}

6.可用MapView展示地图了

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

以上就完成了!
说说我遇到的Bug吧:

android.view.InflateException: Binary XML file line #899: Error inflating class com.baidu.mapapi.map.MapView

这句话的意思是:xml中899行的百度MapView出错;查了网上很多资料,都说没有初始化SDK,但是我的确初始化了,找了半天没发现原因,最后自己又写一个demo发现.so和jar中的不同,但是版本一样,瞬间雷化了;以后再也不用百度了,太坑、太乱!

原文链接:http://www.apkbus.com/blog-784586-63054.html

0人推荐
随时随地看视频
慕课网APP