1. 注册和获取密钥
首先,需要完成开发者注册工作,地址:https://passport.baidu.com/v2/?reg
然后就可以看见我的应用处,可以创建应用:
创建参考文档:Android定位SDK
目前百度地图Android定位SDK境内服务对非商业目的使用的开发者不收取任何费用。
由于我只需要这个功能,故而这里选择:
切换到用户目录下的.android
:
输入cmd
,输入命令:
keytool -list -v -keystore debug.keystore -alias androiddebugkey
输入密钥库口令:andorid
,然后即可看见SHA1
,复制输入即可。
然后是包名,打开AndroidManifest.xml 配置文件,package 属性所对应的内容为应用包名。
然后,提交即可。
2. Android Studio配置
下载Android定位SDK并解压,将libs中的jar和so放置到工程中相应的位置。
我这里在下载中,选择基础定位,JAR,得到BaiduLBS_AndroidSDK_Lib.zip
文件。
按照说明解压,解压后内容如下:
然后,按照官网提示,放置Android定位SDK放置到Android工程中:
切换到project
视图,然后找到libs
:
然后,添加依赖:
android {
...
// 百度定位SDK需要
sourceSets{
main{
jniLibs.srcDir 'libs'
jni.srcDirs = [] //disable automatic ndk-build
}
}
}
implementation files('libs/BaiduLBS_Android.jar')
3. 添加AK
在AndroidManifest.xml文件中加入如下代码配置开发密钥(AK):
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="AK" >
</meta-data>
添加服务:
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
添加权限:
<!-- 这个权限用于进行网络定位-->
<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"/>
4. 获取地址
按照官网案例即可:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/get-location/address
经过测试,还需要自己调用onstop
方法。
// 百度定位
public LocationClient mLocationClient = null;
private MyLocationListener myLocationListener = new MyLocationListener();
private void getLocation() {
// 请求定位
mLocationClient = new LocationClient(getApplicationContext());
List<String> permissionList = new ArrayList<>();
//如果没有启动下面权限,就询问用户让用户打开
if (ContextCompat.checkSelfPermission(PushActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (ContextCompat.checkSelfPermission(PushActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.READ_PHONE_STATE);
}
if (ContextCompat.checkSelfPermission(PushActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (!permissionList.isEmpty()) {
String[] permissions = permissionList.toArray(new String[permissionList.size()]);
ActivityCompat.requestPermissions(PushActivity.this, permissions, 1);
}
requestLocation();
}
/**
* 请求定位
*/
private void requestLocation(){
LocationClientOption option = new LocationClientOption();
option.setScanSpan(500);
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
option.setCoorType("bd09ll");
option.setScanSpan(1000);
option.setOpenGps(true);
option.setIsNeedAddress(true);
option.setLocationNotify(true);
option.setIgnoreKillProcess(false);
option.SetIgnoreCacheException(false);
option.setEnableSimulateGps(false);
option.setNeedNewVersionRgc(true);
mLocationClient.setLocOption(option);
mLocationClient.registerLocationListener(myLocationListener);
mLocationClient.start();
}
private String currentPosition = "";
public class MyLocationListener extends BDAbstractLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
String addr = location.getAddrStr(); //获取详细地址信息
String country = location.getCountry(); //获取国家
String province = location.getProvince(); //获取省份
String city = location.getCity(); //获取城市
String district = location.getDistrict(); //获取区县
String street = location.getStreet(); //获取街道信息
String adcode = location.getAdCode(); //获取adcode
String town = location.getTown(); //获取乡镇信息
EditText reedit_page_position = findViewById(R.id.reedit_page_position);
String position_detail = country+province+city+district;
if(currentPosition.equals(position_detail) && currentPosition.length()!=0){
mLocationClient.unRegisterLocationListener(myLocationListener);
mLocationClient.stop();
}
reedit_page_position.setText(position_detail);
currentPosition = position_detail;
}
}
调用getLocation
即可。
扫描二维码关注公众号,回复:
12930179 查看本文章