Android Studio 百度地图定位

     在APP开发过程中,位置定位是常见的功能之一。常用百度SDK,高德SDK来开发导航系统,这里我就介绍一下利用百度SDK来实现定位,高德的还是算了,我试了一下,为了获取Key值,我还要实名支付宝认证,想了想还是算了。还是百度比较开放一点。

  首先如何配置SDK,获取开发密钥key值,首先要获取SHA1认证:

发布版SHA1:

 cmd 到控制台------->找到jdk安装位置的bin文件夹

 

 

到Android studio 安装位置 找到 debug.keystore

 

 

 输入默认密码: android

 

 

 开发版SHA1:

找到打包用的jks文件的安装目录:

 

 cmd:

 

 输入密钥,注意:这个密钥是你打包时候的密码:

 

 

到百度SDK官网申请开发密钥:

创建应用:

 

 把发布版SHA1和开发版SHA1复制到对应位置。(注意:有很多开发者都是只用了开发版SHA1,没有填写发布版SHA1,感觉好像没有问题,但是其实问题很大,我就遇到这样的坑,当我使用百度定位的时候获取经纬度坐标时候,就会出现每次定位只能定位一次,如果第二次的话就会出现定位失败。我百度好久,才查到原来是申请的密钥的时候没有填写发布版SHA1,我最后重新设置了一下,发现bug真的消失了。)

 

 

发布完后,复制一下密钥:

 

 

 

在app工程里的mainfest.xml 中添加AK:

<application>  
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="开发者 key" />  
</application>

在添加网络权限:

<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
<!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

接下来我们要下载百度SDK:

 

 

新建文件夹jniLibs,把下载的SDK解压放到jniLibs文件夹中:然后将jar放入lib文件夹中引入工程中去:

 

 

 

 环境配置完后,就要实现如何获取当前位置的经纬度了。就拿我们这边的功能实现,施工人员到现场进行站点施工的时候,需要修改站点名称,和获取当前位置的经纬度。

package com.example.appview.mian_page.Frament.Preject_Tance_Frament.ItemA_Activity;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.example.appview.R;
import com.google.android.gms.maps.MapView;
import com.hjq.bar.OnTitleBarListener;
import com.hjq.bar.TitleBar;

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

public class Preject_ItemA_AlterJZ extends AppCompatActivity {
    private TitleBar mTitleBar;
    public LocationClient mLocationClient = null;
    private MapView mapView;
    private MyLocationListener myListener = new MyLocationListener();
    String address="";
    private TextView textlocationXY;
    private EditText editTextAddress;
    String locationXY="";
    //BDAbstractLocationListener为7.2版本新增的Abstract类型的监听接口
   //原有BDLocationListener接口暂时同步保留。具体介绍请参考后文中的说明
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SDKInitializer.initialize(this.getApplicationContext());//初始化操作,传入Context
        setContentView(R.layout.activity_preject_item_aalter_jz);
        ImageView imageView=findViewById(R.id.preject_itema_alterlocation);
        textlocationXY=findViewById(R.id.preject_itema_alterXY);
        editTextAddress=findViewById(R.id.preject_itema_address);
        mLocationClient = new LocationClient(getApplicationContext());
        //声明LocationClient类
        mLocationClient.registerLocationListener(myListener);
        //最上方标题栏
        mTitleBar=findViewById(R.id.tilebar_icon_preject_item_alterJZ);
        mTitleBar.setOnTitleBarListener(new OnTitleBarListener() {
            @Override
            public void onLeftClick(View view) {

            }
            @Override
            public void onTitleClick(View view) {

            }
            @Override
            public void onRightClick(View view) {

            }
        });
        getPermissionMethod();
        //注册监听函数
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(Preject_ItemA_AlterJZ.this, "你离开了该页面", Toast.LENGTH_SHORT).show();
                if (mLocationClient.isStarted()){
                    mLocationClient.stop();
                }
                getlocation();
            }
        });
    }
    private void getlocation(){
        LocationClientOption option = new LocationClientOption();
        option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
        option.setAddrType("all");
        mLocationClient.setLocOption(option);
        mLocationClient.start();
      //mLocationClient为第二步初始化过的LocationClient对象
      //需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用
      //更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明
    }
    public class MyLocationListener extends BDAbstractLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location){
            //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果
            //以下只列举部分获取经纬度相关(常用)的结果信息
            //更多结果信息获取说明,请参照类参考中BDLocation类中的说明
           double latitude = location.getLatitude();    //获取纬度信息
           double longitude = location.getLongitude();  //获取经度信息
            //float radius = location.getRadius();      //获取定位精度,默认值为0.0f
            //String coorType = location.getCoorType();
            //获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准
            int errorCode = location.getLocType();
            //获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明
            //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果
            //以下只列举部分获取地址相关的结果信息
            //更多结果信息获取说明,请参照类参考中BDLocation类中的说明
            //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();          //获取乡镇信息
            String str=country+"-"+province+"-"+city+"-"+district+"-"+street+"-"+town;
            address=str;
            locationXY="("+latitude+","+longitude+")";
            textlocationXY.setText(locationXY);
            editTextAddress.setText(address);
        }
    }
    // 权限请求
    private void getPermissionMethod() {
        List<String> permissionList = new ArrayList<>();
        if(ContextCompat.checkSelfPermission(Preject_ItemA_AlterJZ.this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
            permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
        }
        if (!permissionList.isEmpty()){
            //权限列表不是空
            String[] permissions = permissionList.toArray(new String[permissionList.size()]);
            ActivityCompat.requestPermissions(Preject_ItemA_AlterJZ.this,permissions,1);
        }
    }
}

布局:

<?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:background="@color/white"
    android:orientation="vertical"
    tools:context=".mian_page.Frament.Preject_Tance_Frament.ItemA_Activity.Preject_ItemA_AlterJZ">
    <com.hjq.bar.TitleBar
        android:id="@+id/tilebar_icon_preject_item_alterJZ"
        android:background="#1296db"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:rightIcon="@mipmap/preject_item"
        app:leftTitle="返回"
        app:leftColor="@color/white"
        app:titleColor="@color/white"
        app:leftSize="15dp"
        app:leftIcon="@mipmap/fanhui"
        app:title="探测"/>

    <LinearLayout
        android:layout_marginTop="50dp"
        android:layout_width="match_parent"
        android:layout_height="50dp">
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:text="站点名称"
            android:textColor="@color/black"
            android:gravity="center"/>
        <EditText
            android:layout_width="0dp"
            android:id="@+id/preject_itema_alterjz"
            android:layout_weight="4"
            android:background="@drawable/mainpage_gridview"
            android:layout_height="match_parent"
            android:textColor="@color/black"
            android:layout_marginRight="10dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="50dp">
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:text="站点负责人"
            android:textColor="@color/black"
            android:gravity="center"/>
        <EditText
            android:id="@+id/preject_itema_alterperson"
            android:layout_width="0dp"
            android:layout_weight="4"
            android:textColor="@color/black"
            android:background="@drawable/mainpage_gridview"
            android:layout_height="match_parent"
            android:layout_marginRight="10dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="50dp">
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:text="手机号码"
            android:textColor="@color/black"
            android:gravity="center"/>
        <EditText
            android:id="@+id/preject_itema_phone"
            android:layout_width="0dp"
            android:layout_weight="4"
            android:textColor="@color/black"
            android:background="@drawable/mainpage_gridview"
            android:layout_height="match_parent"
            android:layout_marginRight="10dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="50dp">
        <ImageView
            android:id="@+id/preject_itema_alterlocation"
            android:layout_width="50dp"
            android:layout_marginLeft="30dp"
            android:background="@mipmap/loaction"
            android:layout_height="50dp"/>
        <EditText
            android:layout_width="0dp"
            android:id="@+id/preject_itema_alterXY"
            android:layout_weight="4"
            android:background="@drawable/mainpage_gridview"
            android:layout_height="match_parent"
            android:textColor="@color/black"
            android:enabled="false"
            android:layout_marginRight="10dp"/>

    </LinearLayout>
    <LinearLayout
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="170dp">

        <EditText
            android:id="@+id/preject_itema_address"
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:inputType="textMultiLine"
            android:layout_marginLeft="10dp"
            android:gravity="left|top"
            android:minLines="6"
            android:enabled="false"
            android:textColor="@color/black"
            android:background="@drawable/mainpage_gridview"
            android:layout_marginRight="10dp"/>

    </LinearLayout>
    <LinearLayout
        android:layout_marginTop="50dp"
        android:layout_width="match_parent"
        android:layout_height="50dp">
        <Button
            android:layout_width="match_parent"
            android:layout_marginLeft="10dp"
            android:background="@drawable/mainpage_itemback"
            android:layout_marginRight="10dp"
            android:layout_height="50dp"
            android:text="提交"/>
    </LinearLayout>
</LinearLayout>

效果:

 

posted @ 2021-08-31 16:41  代码如风~~~  阅读(513)  评论(0编辑  收藏  举报