Android Baidu mapa posicionamiento GPS

1. Obtenga una clave en la plataforma de desarrollo de mapas Baidu

http://lbsyun.baidu.com/apiconsole/key/create
Escriba una descripción de la imagen aquí

Código SHA1 obtenido:
Escriba una descripción de la imagen aquí

Después de completar y enviar, se generará automáticamente una clave y se conservará la copia.

En segundo lugar, descargue el SDK de mapas de Baidu
http://lbsyun.baidu.com/sdk/download?selected=location_all

Descargue el posicionamiento básico y el mapa básico, descomprímalo como respaldo

En tercer lugar, el proceso de creación, el nombre del proyecto debe corresponder al nombre del paquete completado en el primer paso (también puede crear el proyecto antes del primer paso)

1. Copie el paquete SDK descargado en el segundo paso en el directorio relacionado con el proceso
Escriba una descripción de la imagen aquí

Archivo de manifiesto

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.administrator.baidulbs_test">
    <!--需要的权限-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_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.WAKE_LOCK"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <!--需要的name为百度LBS固定格式-->
        <!--值为在第一步获取的key-->
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="VlDpPAL7CHBDgY7IrqkpzsyKCtxhAg8c"
            />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!--百度导航需要申明的一个服务-->
        <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
        </service>
    </application>

</manifest>

Archivo de diseño

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/abc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <com.baidu.mapapi.map.MapView
        android:id="@+id/baidu_map"
        android:layout_height="match_parent"
        android:layout_width="match_parent" />
</LinearLayout>


Dirección API oficial de la actividad : http://wiki.lbsyun.baidu.com/cms/androidloc/doc/v7.0/index.html


import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    public LocationClient locationClient;
    private TextView textView;
    private MapView mapView;
    private BaiduMap baiduMap;
    private boolean isFirstLocate = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        locationClient = new LocationClient(getApplicationContext());
        locationClient.registerLocationListener(new MyLocationListener());
        SDKInitializer.initialize(getApplicationContext());//要在setContentView调用之前初始化
        setContentView(R.layout.activity_main);
        mapView = (MapView) findViewById(R.id.baidu_map);
        textView = (TextView) findViewById(R.id.abc);
        baiduMap = mapView.getMap();//地图总控制台
        baiduMap.setMyLocationEnabled(true);
        List<String> list = new ArrayList<>();
        //运行时权限,没有注册就重新注册
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            list.add(Manifest.permission.ACCESS_FINE_LOCATION);
        }
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            list.add(Manifest.permission.READ_PHONE_STATE);
        }
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            list.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }
        if (!list.isEmpty()) {//没有权限就添加
            String[] permissions = list.toArray(new String[list.size()]);//如果list不为空,就调用ActivityCompat.requestPermissions添加权限
            ActivityCompat.requestPermissions(MainActivity.this, permissions, 1);
        } else {//有相关权限则执行程序
            requestLocation();
        }
    }

    private void requestLocation() {
        init();
        locationClient.start();
    }

    private void init() {
        LocationClientOption option = new LocationClientOption();
        option.setIsNeedAddress(true);
        option.setScanSpan(5000); //设置发起定位请求的间隔时间为5000ms
        locationClient.setLocOption(option);
    }

    private void navigateTo(BDLocation location) {
        if (isFirstLocate) {
            Toast.makeText(this, "维度:" + location.getLatitude() + "经线:" + location.getLongitude(), Toast.LENGTH_SHORT).show();
            LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());//获取当前经纬度并且传递给LatLng
            MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
            baiduMap.animateMapStatus(update);//将地图定位更新到当前位置
            update = MapStatusUpdateFactory.zoomTo(16f);//地图缩放倍数
            baiduMap.animateMapStatus(update);
            isFirstLocate = false;
        }
        MyLocationData.Builder builder = new MyLocationData.Builder();   //将当前位置在地图上标记出来
        builder.latitude(location.getLatitude());//传入经纬度
        builder.longitude(location.getLongitude());//传入经纬度
        MyLocationData locationData = builder.build();
        baiduMap.setMyLocationData(locationData);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        locationClient.stop();
        mapView.onDestroy();
        baiduMap.setMyLocationEnabled(false);
    }

    @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;
            default:
        }
    }

    public class MyLocationListener implements BDLocationListener {
        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            {//定位信息获取
                StringBuilder currentPosition = new StringBuilder();
                currentPosition.append("纬度:").append(bdLocation.getLatitude()).append("\n");
                currentPosition.append("经线:").append(bdLocation.getLongitude()).append("\n");
                currentPosition.append("国家:").append(bdLocation.getCountry()).append("\n");
                currentPosition.append("省:").append(bdLocation.getProvince()).append("\n");
                currentPosition.append("市:").append(bdLocation.getCity()).append("\n");
                currentPosition.append("区:").append(bdLocation.getDirection()).append("\n");
                currentPosition.append("街道:").append(bdLocation.getStreet()).append("\n");
                currentPosition.append("定位方式:");
                if (bdLocation.getLocType() == BDLocation.TypeGpsLocation) {
                    currentPosition.append("GPS");
                } else if (bdLocation.getLocType() == BDLocation.TypeNetWorkLocation) {
                    currentPosition.append("网络");
                } else {
                    currentPosition.append("Error:" + bdLocation.getLocType());
                }
                textView.setText(currentPosition);
            }
            if (bdLocation.getLocType() == BDLocation.TypeGpsLocation
                    || bdLocation.getLocType() == BDLocation.TypeNetWorkLocation) {
                navigateTo(bdLocation);
            }
        }
    }
}

Renderings
Escriba una descripción de la imagen aquí

Publicado 34 artículos originales · Me gusta 10 · Visitas 30,000+

Supongo que te gusta

Origin blog.csdn.net/q296264785/article/details/54315740
Recomendado
Clasificación