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>
效果:
.Net Core