百度api,安卓,经纬度,AS,java11、sdk28,下面有代码
1、开干
登录百度官网获取jar包,直接拉他代码跑一遍,因为我只是需要单纯获取经纬度,所以拿最简单的
注:如果擅长的拿开发包就能搞,不擅长的像我这种小菜鸡,先烤他示例代码跑一遍,主要就是了解他那些jar包怎么放和怎么调用
接下来是我照猫画虎了,换个芝士继续干
2、我的项目:
2.1、libs没有就新建,然后百度的示例项目jar丢到里面就行,然后到app项目下的gradle引用库
2.2、然后去清单列表加上;
2.3、权限清单我懒得整理了,都是百度示例的,下面再贴
2.4:AK(Android key鉴权)获取
参考大佬的:
2.4.1
2.4.2
但是我那个这么sha1不对,报错:百度地图api result = {“status“:230,“message“:“APP Mcode码校验失败“,然后再选择第二种思路就能成功了:
百度导航SDK APP Mcode码校验失败解决方案-CSDN博客
这个需要做成apk,需要可参考:Android Studio 打包APK(详细版)_as打包apk-CSDN博客
3、思路就是这样,接下来上代码:
import android.app.Application;
import android.app.Service;
import android.os.Vibrator;
import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.common.BaiduMapSDKException;
/**
* 主Application,所有百度定位SDK的接口说明请参考线上文档:http://developer.baidu.com/map/loc_refer/index.html
* <p>
* 百度定位SDK官方网站:http://developer.baidu.com/map/index.php?title=android-locsdk
* <p>
* 直接拷贝com.baidu.location.service包到自己的工程下,简单配置即可获取定位结果,也可以根据demo内容自行封装
*/
public class LocationApplication extends Application {
public Vibrator mVibrator;
@Override
public void onCreate() {
super.onCreate();
// 默认本地个性化地图初始化方法
SDKInitializer.setAgreePrivacy(this, true);
try {
SDKInitializer.initialize(this);
} catch (BaiduMapSDKException e) {
e.printStackTrace();
}
SDKInitializer.setCoordType(CoordType.BD09LL);
mVibrator = (Vibrator) getApplicationContext().getSystemService(Service.VIBRATOR_SERVICE);
}
}
public class MainActivity extends AppCompatActivity {
public LocationClient mLocationClient = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 申请网络访问,没有这句不行的
LocationClient.setAgreePrivacy(true);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
try {
mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类
} catch (Exception e) {
e.printStackTrace();
}
initLocation();
mLocationClient.registerLocationListener(new MyLocationListener());
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
mLocationClient.start();
}
@Override
protected void onPause() {
super.onPause();
}
private void initLocation() {
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
int span = 1000;
option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);//可选,默认false,设置是否使用gps
option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
mLocationClient.setLocOption(option);
}
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
System.out.println(location.getLatitude());
System.out.println(location.getLongitude());
mLocationClient.stop();
}
}
}
activity_main.xml
<?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"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/bmapView"
android:layout_alignParentBottom="true"
android:text="按下这个按钮" />
</RelativeLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.baidu.baidulocationdemo">
<!-- 这个权限用于进行网络定位-->
<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" />
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 允许挂载和反挂载文件系统可移动存储 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 允许程序读取底层系统日志文件 -->
<uses-permission android:name="android.permission.READ_LOGS" />
<!-- 允许访问振动设备 -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 允许程序读取或写入系统设置 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- android 9.0上使用前台服务,需要添加权限 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 读取缓存数据 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 获取模拟定位信息 -->
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<application
android:name="com.baidu.location.demo.LocationApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<!-- 声明service组件 -->
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" />
<!-- AK鉴权 -->
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="LDvSUJq1r6pIH0BBm3sxmtltwzhzsulv" /> <!-- http://lbsyun.baidu.com/apiconsole/key -->
<activity
android:name="com.baidu.location.demo.MainActivity"
android:exported="true"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
app下的build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 31
defaultConfig {
applicationId "com.baidu.baidulocationdemo"
minSdkVersion 16
targetSdkVersion 31
versionCode 1
versionName "1.0"
}
lintOptions {
abortOnError false
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
dependencies {
implementation files('libs/BaiduLBS_Android.jar')
//noinspection GradleCompatible
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.squareup.okhttp3:okhttp:3.13.1' // 从定位SDK9.5.2开始,需要加上okhttp库依赖
}
完结,撒花❀❀❀❀❀❀❀❀❀❀❀❀
需要demo的话我可以贴到百度网盘,开源是一种精神,也是理工男的浪漫。