1.平台注册登录
登录百度地图开放平台网站注册并登录
网址:https://lbsyun.baidu.com
2.创建应用
点击右上角控制台,然后点击左侧“我的应用”,最后点击"创建应用"    应用名随便填,应用类型选Android SDK。找到Android目录下的debug.keystore文件,并复制其文件路径。(找不到在磁盘中全局搜索debug.keystore)  在java JDK中的bin目录打开命令窗口输入keytool -list -v -keystore +刚复制的debug.keystore文件路径  密钥库口令默认为 “android” (注:输入不显示),生成成功复制SHA1内容,发布版,开发版输入内容相同 
使用AS创建android项目,复制主入口activity包名,点击提交生成应用。复制其中访问应用的AK  
3.Android studio配置
打开AndroidMainifest.xml 配置meta-data标签,value值为刚复制的AK值  下载开发包   根据想要的功能下载开发包(选择JAR类型) 
解压下好的压缩文件,进入libs文件夹,复制所有文件  将Android studio工程类型切换成project 把复制的文件粘贴到libs中  在build.gradle中配置如图内容,点击同步   android studio切换Android工程时出现了jniLibs文件夹即为加载成功  在AndroidManifest.xml中配置百度的服务  引入各种权限配置
<!-- 网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- WIFI定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 运营商相关接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 获取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>
<!-- android9以上前台服务-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
4.代码编写
xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/locationInfo"
android:layout_width="wrap_content"
android:layout_height="200dp"
/>
<com.baidu.mapapi.map.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
>
</com.baidu.mapapi.map.MapView>
</LinearLayout>
MainActivity
public class MainActivity extends AppCompatActivity {
private TextView locationInfo;
LocationClient mLocationClient;
MapView mapView;
BaiduMap baiduMap=null;
boolean isFirst=true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
locationInfo = findViewById(R.id.locationInfo);
mLocationClient=new LocationClient(getApplicationContext());
mLocationClient.registerLocationListener(new MyLocationListener());
mapView=findViewById(R.id.mapView);
baiduMap=mapView.getMap();
baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
baiduMap.setMyLocationEnabled(true);
getPermission();
}
public void getPermission(){
ArrayList<String> permissionList = new ArrayList<>();
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE)!= PackageManager.PERMISSION_GRANTED){
permissionList.add(Manifest.permission.READ_PHONE_STATE);
}
if (ContextCompat.checkSelfPermission(MainActivity.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(MainActivity.this,permissions,1);
}else {
requestLocation();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case 1:
if (grantResults.length>0){
for (int result:grantResults){
if (result!=PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "必须同意所有权限才能使用 ", Toast.LENGTH_SHORT).show();
finish();
return;
}
}
requestLocation();
}else {
Toast.makeText(this, "未知错误 ", Toast.LENGTH_SHORT).show();
finish();
}
break;
}
}
private void requestLocation() {
initLocation();
mLocationClient.start();
}
private void initLocation() {
LocationClientOption option=new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
option.setCoorType( "BD09LL");
option.setScanSpan(1000) ;
option.setOpenGps(true) ;
option.setLocationNotify(true);
option.setIgnoreKillProcess(false) ;
option. SetIgnoreCacheException(false) ;
option.setWifiCacheTimeOut(5*60*1000);
option.setEnableSimulateGps(false) ;
option.setIsNeedAddress(true);
mLocationClient.setLocOption(option);
}
private class MyLocationListener extends BDAbstractLocationListener{
@Override
public void onReceiveLocation(BDLocation location) {
navigateTo(location);
StringBuilder currentPosition = new StringBuilder( ) ;
currentPosition.append("纬度:").append(location.getLatitude()).append("\n");
currentPosition.append("经度:").append(location.getLongitude()). append("\n");
currentPosition.append("国家: " ).append(location.getCountry()).append("\n");
currentPosition.append("省:" ).append(location.getProvince()).append("\n");
currentPosition.append("市: " ).append(location.getCity()).append("\n");
currentPosition.append("区:" ).append(location.getDistrict()) .append("\n");
currentPosition.append("村镇: ").append(location.getTown()) .append("\n");
currentPosition.append("街道: ").append(location.getStreet()).append("\n");
currentPosition.append("地址: ").append(location.getAddrStr( ) ).append("\n");
currentPosition.append("定位方式:");
if ( location.getLocType() == BDLocation.TypeGpsLocation) {
currentPosition. append("GPS" ) ;
}else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
currentPosition. append("网络");
}
locationInfo.setText(currentPosition);
}
}
private void navigateTo(BDLocation location) {
if (isFirst) {
LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
baiduMap.animateMapStatus(update);
update = MapStatusUpdateFactory.zoomTo(16f);
baiduMap.animateMapStatus(update);
isFirst=false;
}
MyLocationData.Builder builder = new MyLocationData.Builder();
builder.longitude(location.getLongitude());
builder.latitude(location.getLatitude());
MyLocationData locationData = builder.build();
baiduMap.setMyLocationData(locationData);
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
baiduMap.setMyLocationEnabled(false);
mLocationClient.stop();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
}
5.最终效果(建议真机)

|