今天由于项目功能需求,使用了这个SDK。现简单总结一下制作了一个小的Demo

首先,竟然要使用百度的APL自然需要去满足它的条件,步骤如下:

1、下载百度地图的SDK 
      下载地址:百度地图SDK下载
<http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download>
2、申请key值 
      注册百度账号——>登录百度地图官网——>控制台—–>创建应用 
      获取key(也就是AK权限码)的具体方法的官网地址 :百度开放平台
<http://lbsyun.baidu.com/apiconsole/key> 

     

      按照他的提示一步一步就完成AK码的注册了。

3、将下载的SDK解压,然后将里面的东西放到项目的libs中并add将jar添加至项目依赖

            

4、在src/main下建立一个叫做jniLibs的文件夹,并把解压后内的文件夹靠进去,如下图:

         

5、在工程的“ AndroidManifest.xml ”文件添加key和Service,直接复制就行

       
<meta-data android:name="com.baidu.lbsapi.API_KEY"
android:value="j36KpKpfbA3niIDX4Boa67x2rbGlahe3" /> <service
android:name="com.baidu.location.f" android:enabled="true"
android:process=":remote" />
6、在app下的build.gradle中android先将SDK引用语句添加进去结构如下

   
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
      

7、当然还有一个很重要的东西,那便是权限了。没有权限你就啥都做不了了。全部复制添加进去进行。

      
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--GPS定位--> <uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission
android:name="android.permission.READ_PHONE_STATE" > </uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
</uses-permission> <uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION" > </uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission> <uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission> <uses-permission
android:name="android.permission.READ_PHONE_STATE" > </uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission> <uses-permission android:name="android.permission.INTERNET"
/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
> </uses-permission> <uses-permission
android:name="android.permission.READ_LOGS" > </uses-permission>
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission
android:name="android.permission.WAKE_LOCK" /> <uses-permission
android:name="android.permission.WRITE_SETTINGS" />
8、好,准备工作都完成了直接看代码

        布局文件如下
<?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:orientation="vertical"
android:layout_height="match_parent"
tools:context="com.example.administrator.pdademo.MainActivity"> <Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="开始定位" android:id="@+id/dinweiBtn"/> <LinearLayout
android:layout_width="match_parent" android:orientation="vertical"
android:layout_height="wrap_content"> <LinearLayout
android:layout_width="match_parent" android:orientation="horizontal"
android:layout_height="wrap_content"> <TextView
android:layout_width="wrap_content" android:text="经度 : "
android:textSize="25dp" android:layout_height="wrap_content" /> <EditText
android:id="@+id/j" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="111"
android:textSize="25dp"/> </LinearLayout> <LinearLayout
android:layout_width="match_parent" android:orientation="horizontal"
android:layout_height="wrap_content"> <TextView
android:layout_width="wrap_content" android:text="纬度 : "
android:textSize="25dp" android:layout_height="wrap_content" /> <EditText
android:id="@+id/w" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="111"
android:textSize="25dp"/> </LinearLayout> </LinearLayout> </LinearLayout>
接下来就是写一个定位的服务   getDefaultLocationClientOption()方法中可设置一些属性,更多的可以去百度的官方文档查看

  
package com.example.administrator.pdademo; import android.content.Context;
import com.baidu.location.BDLocationListener; import
com.baidu.location.LocationClient; import
com.baidu.location.LocationClientOption; import
com.baidu.location.LocationClientOption.LocationMode; /** * @author baidu */
public class LocationService { private LocationClient client = null; private
LocationClientOption mOption, DIYoption; private Object objLock = new Object();
/*** * * @param locationContext */ public LocationService(Context
locationContext) { synchronized (objLock) { if (client == null) { client = new
LocationClient(locationContext);
client.setLocOption(getDefaultLocationClientOption()); } } } /*** * * @param
listener * @return */ public boolean registerListener(BDLocationListener
listener) { boolean isSuccess = false; if (listener != null) {
client.registerLocationListener(listener); isSuccess = true; } return
isSuccess; } /*** * * @param option * @return isSuccessSetOption */ public
boolean setLocationOption(LocationClientOption option) { boolean isSuccess =
false; if (option != null) { if (client.isStarted()) client.stop(); DIYoption =
option; client.setLocOption(option); isSuccess = true; } return isSuccess; }
public LocationClientOption getOption() { return DIYoption; } /*** * * @return
DefaultLocationClientOption */ public LocationClientOption
getDefaultLocationClientOption() { if (mOption == null) { mOption = new
LocationClientOption();
mOption.setLocationMode(LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
mOption.setCoorType("gcj02");//可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;
mOption.setScanSpan(10000);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
mOption.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
mOption.setIsNeedLocationDescribe(true);//可选,设置是否需要地址描述
mOption.setNeedDeviceDirect(false);//可选,设置是否需要设备方向结果
mOption.setLocationNotify(false);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
mOption.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
mOption.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
mOption.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
mOption.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集 } return
mOption; } public void start() { synchronized (objLock) { if (client != null &&
!client.isStarted()) { client.start(); } } } public void stop() { synchronized
(objLock) { if (client != null && client.isStarted()) { client.stop(); } } } }
 
最后就是主方法  mListener是百度提供的一个回调方法,里面就是百度API返回的数据了,我这里只是获取了经纬度。大家如果想获取更多的数据可至百度官方文档查看一些属性。反正他的数据是全部返回了。
package com.example.administrator.pdademo; import android.content.Context;
import android.location.LocationManager; import
android.support.v7.app.AppCompatActivity; import android.os.Bundle; import
android.util.Log; import android.view.View; import android.widget.Button;
import android.widget.EditText; import android.widget.TextView; import
android.widget.Toast; import com.baidu.location.BDLocation; import
com.baidu.location.BDLocationListener; public class MainActivity extends
AppCompatActivity { Button button; private LocationService locationService;
String mLatitudeStr,mLongitudeStr,province; EditText j,w; private static final
String TAG = "MainActivity"; private BDLocationListener mListener = new
BDLocationListener() { int count = 0; @Override public void
onReceiveLocation(BDLocation location) { mLatitudeStr =
Double.toString(location.getLatitude()); mLongitudeStr =
Double.toString(location.getLongitude()); Log.d(TAG, "onReceiveLocation:
纬度"+mLatitudeStr+" 经度 "+mLongitudeStr); j.setText(mLongitudeStr);
w.setText(mLatitudeStr); count++; province = location.getProvince(); if
(!"".equals(province) && locationService != null) { locationService.stop(); } }
}; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
button=findViewById(R.id.dinweiBtn); j=findViewById(R.id.j);
w=findViewById(R.id.w); locationService=new
LocationService(getApplicationContext());
locationService.registerListener(mListener); //注册监听
locationService.setLocationOption(locationService.getDefaultLocationClientOption());
button.setOnClickListener(new View.OnClickListener() { @Override public void
onClick(View view) { if (!isopen()){ Toast.makeText(MainActivity.this, "GPS没开",
Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MainActivity.this, "开了",
Toast.LENGTH_SHORT).show(); } locationService.start(); } }); } private boolean
isopen(){ LocationManager locationManager =
(LocationManager)getApplicationContext().
getSystemService(Context.LOCATION_SERVICE); return
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); } }
OK,写完了。万事俱备只差shift+f10了

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信