百度地图Android定位

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 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_26460841/article/details/115261413