1. Registre-se e obtenha a chave
Primeiro, você precisa concluir o trabalho de registro do desenvolvedor, endereço: https://passport.baidu.com/v2/?reg
Então você pode ver meu aplicativo , você pode criar um aplicativo:
criar um documento de referência: SDK de posicionamento do Android
Atualmente, o serviço doméstico SDK de posicionamento do Android do Baidu Maps não cobra nenhuma taxa dos desenvolvedores que o utilizam para fins não comerciais.
Como só preciso dessa função, escolho aqui:
mude para o diretório do usuário .android
:
entrada cmd
, insira o comando:
keytool -list -v -keystore debug.keystore -alias androiddebugkey
Digite a senha do armazenamento de chaves :, andorid
então você poderá vê-la SHA1
, basta copiá-la e digitá-la.
Em seguida, está o nome do pacote. Abra o arquivo de configuração AndroidManifest.xml. O conteúdo correspondente ao atributo do pacote é o nome do pacote do aplicativo.
Em seguida, envie-o.
2. Configuração do Android Studio
Baixe o SDK de localização do Android, descompacte-o e coloque o jar e assim nas bibliotecas para o local correspondente no projeto.
Estou aqui no download, seleciono o posicionamento básico, JAR, e pego o BaiduLBS_AndroidSDK_Lib.zip
arquivo.
Siga as instruções para descompactar e o conteúdo após a descompactação é o seguinte:
Em seguida, siga as instruções no site oficial para colocar o SDK de posicionamento do Android no projeto Android:
mude para a project
visualização e encontre libs
:
Em seguida, adicione dependências:
android {
...
// 百度定位SDK需要
sourceSets{
main{
jniLibs.srcDir 'libs'
jni.srcDirs = [] //disable automatic ndk-build
}
}
}
implementation files('libs/BaiduLBS_Android.jar')
3. Adicionar AK
Adicione o seguinte código ao arquivo AndroidManifest.xml para configurar a chave de desenvolvimento (AK):
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="AK" >
</meta-data>
Adicionar serviço:
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
Adicionar permissões:
<!-- 这个权限用于进行网络定位-->
<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. Obtenha o endereço
Basta seguir o caso do site oficial: http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/get-location/address
Após o teste, você também precisa chamar o onstop
método.
// 百度定位
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;
}
}
Basta ligar getLocation
.