注册百度开发者账户、获取密钥
2.点击“创建应用”开始申请开发密钥,如下图:
3.填写应用名称,注意应用类型选择“Android SDK”、正确填写SHA1 和 程序包名
应用名称:
自己随便写
包名:
就是你应用程序的包名,打开应用程序的AndroidManifest.xml文件,package后面就是包名
开发版SHA1:
打开Android Studio任意一个项目,点击右侧工具栏Gradle->项目名->app->Tasks->android,双击signingReport
在下方就会出现SHA1,把它复制到开发版SHA1。
发布版SHA1:
如果你的应用只是用于平时的程序练习,简单起见,可以直接在这里填写上面的开发版SHA1,之后提交,就可以得到对应的AK了
下载百度地图SDK
点击开发文档->Android地图SDk->产品下载->自定义下载
要实现什么功能就选择下载什么,我这里只是用于获取经纬度,所以只用选择基础定位下载即可。
下载后解析点开他有两个文件,第一个文件是我们一会要用的。
Android Stdio的配置
- 点开刚才的libs文件,里面有如下文件
- 把他们全放在libs目录下
- 配置build.gradle文件
在build.gradle配置我们的libs路径(sourceSets和defaultConfig同级)
sourceSets{
main{
jniLibs.srcDir 'libs'
}
}
注意这边的libs是和src同级,才会生效,不同目录结构按以下修改
jniLibs.srcDirs =['src/main/libs']
- 添加依赖
api files('libs/BaiduLBS_Android.jar')
添加后完整的build.gradle如下
apply plugin: 'com.android.application'
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"
defaultConfig {
applicationId "com.example.gps"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
sourceSets{
main{
jniLibs.srcDir 'libs'
jni.srcDirs = [] //disable automatic ndk-build
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
api files('libs/BaiduLBS_Android.jar')
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
- AndoirdMainifest.xml中的配置
在AndoirdMainifest.xml的application底下添加
<!-- 声明service组件 -->
<application
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote">
</service>
<!-- AK鉴权 -->
<!-- meta-data需要写在application中 -->
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="申请的密钥AK" />
</application>
加入所需的权限
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
使用
获取经纬度信息
- 初始化LocationClient类
主线程中声明LocationClient类对象,该对象初始化需传入Context类型参数。
private LocationClient locationClient;
//这个类的具体实现在下面
private MyLocationListener myLocationListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建LocationClient对象
locationClient = new LocationClient(getApplicationContext());
//注册监听函数
locationClient.registerLocationListener(myLocationListener);
}
- 配置定位SDK参数
通过参数配置,可选择定位模式、可设定返回经纬度坐标类型、可设定是单次定位还是连续定位
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
//可选,设置定位模式,默认高精度
//LocationMode.Hight_Accuracy:高精度;
//LocationMode. Battery_Saving:低功耗;
//LocationMode. Device_Sensors:仅使用设备;
option.setCoorType("bd09ll");
//可选,设置返回经纬度坐标类型,默认GCJ02
//GCJ02:国测局坐标;
//BD09ll:百度经纬度坐标;
//BD09:百度墨卡托坐标;
//海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标
option.