效果展示

已经下载Demo的可以直接到第五步,已经配置好的并可以运行的可以直接到第七步。

1.在浏览器搜索 ” 百度定位API “,点击下面这个链接

2.翻到最下面找到并点击 ” Android定位SDK “

3.在左侧导航找到 " 产品下载"

4.点击DEMO下载,这个DEMO就开始下载了

5.从文件夹打开并解压

6.此时的文件还不能用自己的Android Atudio打开,需要配置一些参数

配置参数教程

7.可以此时项目能够打开,但是要实现定位功能还需要获取ak鉴权

从16分56秒开始   ak鉴权获取教程

获取SHA1代码

  1. public static String sHA1(Context context) {
  2. try {
  3. PackageInfo info = context.getPackageManager().getPackageInfo(
  4. context.getPackageName(), PackageManager.GET_SIGNATURES);
  5. byte[] cert = info.signatures[0].toByteArray();
  6. MessageDigest md = MessageDigest.getInstance("SHA1");
  7. byte[] publicKey = md.digest(cert);
  8. StringBuffer hexString = new StringBuffer();
  9. for (int i = 0; i < publicKey.length; i++) {
  10. String appendString = Integer.toHexString(0xFF & publicKey[i])
  11. .toUpperCase(Locale.US);
  12. if (appendString.length() == 1)
  13. hexString.append("0");
  14. hexString.append(appendString);
  15. hexString.append(":");
  16. }
  17. String result = hexString.toString();
  18. System.out.println("SHA1:"+result);
  19. return result;
  20. } catch (PackageManager.NameNotFoundException e) {
  21. e.printStackTrace();
  22. } catch (NoSuchAlgorithmException e) {
  23. e.printStackTrace();
  24. }
  25. return null;
  26. }

8.Android Atudio打开文件后就可以正常运行啦

9.抽取上面提到的功能

通过MainActivity.java找到需要实现的功能的代码

然后将lib文件夹、servlet文件夹、LocationService.java、AndroidManifest.xml复制到自己的项目中,调试一下基本就可以运行了。

10.代码

MainActivity.java

  1. import androidx.appcompat.app.AppCompatActivity;
  2.  
  3. import android.Manifest;
  4. import android.annotation.TargetApi;
  5. import android.content.SharedPreferences;
  6. import android.content.pm.PackageManager;
  7. import android.os.Build;
  8. import android.os.Bundle;
  9. import android.text.method.ScrollingMovementMethod;
  10. import android.view.View;
  11. import android.widget.ArrayAdapter;
  12. import android.widget.Button;
  13. import android.widget.ListView;
  14. import android.widget.TextView;
  15.  
  16. import com.baidu.baidulocationdemo.R;
  17. import com.baidu.location.BDAbstractLocationListener;
  18. import com.baidu.location.BDLocation;
  19. import com.baidu.location.Poi;
  20. import com.baidu.location.PoiRegion;
  21. import com.example.locationdemo.service.LocationService;
  22.  
  23. import java.util.ArrayList;
  24.  
  25. public class MainActivity extends AppCompatActivity {
  26. private final int SDK_PERMISSION_REQUEST = 127;
  27. private LocationService locationService;
  28. private String permissionInfo;
  29. private TextView LocationResult;
  30. private Button startLocation;
  31.  
  32. @Override
  33. protected void onCreate(Bundle savedInstanceState) {
  34. super.onCreate(savedInstanceState);
  35. setContentView(R.layout.activity_main);
  36. // sHA1(this); //获取AK
  37. getPersimmions(); //获取定位权限
  38. LocationResult = (TextView) findViewById(R.id.locationResult);
  39. startLocation = (Button) findViewById(R.id.startLocation);
  40. initUiti();
  41. }
  42.  
  43. private void initUiti() {
  44. startLocation.setOnClickListener(new View.OnClickListener() {
  45. @Override
  46. public void onClick(View v) {
  47. locationService.start();
  48. }
  49. });
  50. }
  51.  
  52. protected void onStart() {
  53. // TODO Auto-generated method stub
  54. super.onStart();
  55. // -----------location config ------------
  56. locationService = ((LocationApplication) getApplication()).locationService;
  57. //获取locationservice实例,建议应用中只初始化1个location实例,然后使用,可以参考其他示例的activity,都是通过此种方式获取locationservice实例的
  58. locationService.registerListener(mListener);
  59. //注册监听
  60. int type = getIntent().getIntExtra("from", 0);
  61. if (type == 0) {
  62. locationService.setLocationOption(locationService.getDefaultLocationClientOption());
  63. } else if (type == 1) {
  64. locationService.start();
  65. }
  66. startLocation.setOnClickListener(new View.OnClickListener() {
  67.  
  68. @Override
  69. public void onClick(View v) {
  70. if (startLocation.getText().toString().equals("开始定位")) {
  71. locationService.start();// 定位SDK
  72. // start之后会默认发起一次定位请求,开发者无须判断isstart并主动调用request
  73. startLocation.setText("停止定位");
  74. } else {
  75. locationService.stop();
  76. startLocation.setText("开始定位");
  77. }
  78. }
  79. });
  80. }
  81.  
  82. /***
  83. * Stop location service
  84. */
  85. @Override
  86. protected void onStop() {
  87. // TODO Auto-generated method stub
  88. locationService.unregisterListener(mListener); //注销掉监听
  89. locationService.stop(); //停止定位服务
  90. super.onStop();
  91. }
  92.  
  93. private final BDAbstractLocationListener mListener = new BDAbstractLocationListener() {
  94. @Override
  95. public void onReceiveLocation(BDLocation location) {
  96. if (null != location && location.getLocType() != BDLocation.TypeServerError) {
  97. if(location.getAddrStr()!=null){
  98. LocationResult.setText(location.getAddrStr());
  99. locationService.stop();
  100. }
  101. }
  102. }
  103. };
  104.  
  105. @TargetApi(23)
  106. private void getPersimmions() {
  107. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  108. ArrayList<String> permissions = new ArrayList<String>();
  109. /***
  110. * 定位权限为必须权限,用户如果禁止,则每次进入都会申请
  111. */
  112. // 定位精确位置
  113. if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
  114. permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
  115. }
  116. if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
  117. permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
  118. }
  119. /*
  120. * 读写权限和电话状态权限非必要权限(建议授予)只会申请一次,用户同意或者禁止,只会弹一次
  121. */
  122. // 读写权限
  123. if (addPermission(permissions, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
  124. permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n";
  125. }
  126. if (permissions.size() > 0) {
  127. requestPermissions(permissions.toArray(new String[permissions.size()]), SDK_PERMISSION_REQUEST);
  128. }
  129. }
  130. }
  131.  
  132. @TargetApi(23)
  133. private boolean addPermission(ArrayList<String> permissionsList, String permission) {
  134. // 如果应用没有获得对应权限,则添加到列表中,准备批量申请
  135. if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
  136. if (shouldShowRequestPermissionRationale(permission)) {
  137. return true;
  138. } else {
  139. permissionsList.add(permission);
  140. return false;
  141. }
  142. } else {
  143. return true;
  144. }
  145. }
  146.  
  147. public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
  148. // TODO Auto-generated method stub
  149. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  150. }
  151.  
  152. /* public static String sHA1(Context context) {
  153. try {
  154. PackageInfo info = context.getPackageManager().getPackageInfo(
  155. context.getPackageName(), PackageManager.GET_SIGNATURES);
  156. byte[] cert = info.signatures[0].toByteArray();
  157. MessageDigest md = MessageDigest.getInstance("SHA1");
  158. byte[] publicKey = md.digest(cert);
  159. StringBuffer hexString = new StringBuffer();
  160. for (int i = 0; i < publicKey.length; i++) {
  161. String appendString = Integer.toHexString(0xFF & publicKey[i])
  162. .toUpperCase(Locale.US);
  163. if (appendString.length() == 1)
  164. hexString.append("0");
  165. hexString.append(appendString);
  166. hexString.append(":");
  167. }
  168. String result = hexString.toString();
  169. System.out.println("SHA1:"+result);
  170. return result;
  171. } catch (PackageManager.NameNotFoundException e) {
  172. e.printStackTrace();
  173. } catch (NoSuchAlgorithmException e) {
  174. e.printStackTrace();
  175. }
  176. return null;
  177. }
  178.  
  179. */
  180.  
  181. }

activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:orientation="vertical">
  8.  
  9. <TextView
  10. android:id="@+id/locationResult"
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:text="Hello World!"
  14. app:layout_constraintLeft_toLeftOf="parent"
  15. app:layout_constraintRight_toRightOf="parent"
  16. app:layout_constraintTop_toTopOf="parent" />
  17. <Button
  18. android:id="@+id/startLocation"
  19. android:text="开始定位"
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. app:layout_constraintBottom_toBottomOf="parent"
  23. app:layout_constraintLeft_toLeftOf="parent"
  24. app:layout_constraintRight_toRightOf="parent"
  25. app:layout_constraintTop_toTopOf="parent"/>
  26.  
  27. </LinearLayout>

AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.baidu.baidulocationdemo">
  4.  
  5. <!-- 这个权限用于进行网络定位-->
  6. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  7. <!-- 这个权限用于访问GPS定位-->
  8. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  9. <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
  10. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  11. <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
  12. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  13. <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
  14. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
  15. <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
  16. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  17. <!-- 访问网络,网络定位需要上网 -->
  18. <uses-permission android:name="android.permission.INTERNET"/>
  19. <!-- 允许挂载和反挂载文件系统可移动存储 -->
  20. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  21. <!-- 允许程序读取底层系统日志文件 -->
  22. <uses-permission android:name="android.permission.READ_LOGS"/>
  23. <!-- 允许访问振动设备 -->
  24. <uses-permission android:name="android.permission.VIBRATE"/>
  25. <!-- 允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失 -->
  26. <uses-permission android:name="android.permission.WAKE_LOCK"/>
  27. <!-- 允许程序读取或写入系统设置 -->
  28. <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
  29. <!-- android 9.0上使用前台服务,需要添加权限 -->
  30. <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
  31. <!-- 用于读取手机当前的状态 -->
  32. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  33. <!-- 读取缓存数据 -->
  34. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  35. <!-- 获取模拟定位信息 -->
  36. <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
  37.  
  38. <application
  39. android:requestLegacyExternalStorage="true"
  40. android:name="com.example.locationdemo.LocationApplication"
  41. android:allowBackup="true"
  42. android:icon="@mipmap/ic_launcher"
  43. android:label="@string/app_name"
  44. android:roundIcon="@mipmap/ic_launcher_round"
  45. android:supportsRtl="true"
  46. android:theme="@style/AppTheme">
  47. <!-- 声明service组件 -->
  48. <service
  49. android:name="com.baidu.location.f"
  50. android:enabled="true"
  51. android:process=":remote"/>
  52. <!-- AK鉴权 -->
  53. <meta-data
  54. android:name="com.baidu.lbsapi.API_KEY"
  55. android:value="2N8xydK1CHyShBGxYhMkzTP0jRsVv9Lh" /> <!-- http://lbsyun.baidu.com/apiconsole/key -->
  56.  
  57. <activity
  58. android:name="com.example.locationdemo.MainActivity">
  59. <intent-filter>
  60. <action android:name="android.intent.action.MAIN" />
  61. <category android:name="android.intent.category.LAUNCHER" />
  62. </intent-filter>
  63. </activity>
  64. </application>
  65.  
  66. </manifest>

github:查看代码

一个抽取百度定位的教程(下载百度地图Demo+配置+抽取)的更多相关文章

  1. Mac使用Aria2下载百度网盘,突破下载限速的方法教程

    百度网盘目前可以说是在国内网盘环境中一枝独秀,日常使用触及在所难免,尤其是对于喜欢下载资源的朋友来说,但是一些限制让它的使用越来越难,尤其是下载速度,普通用户的下载往往远低于自己的预期,特别是对于 M ...

  2. IDM使用教程:利用IDM下载百度网盘文件

    IDM是什么 其实我使用IDM下载器只是为了方便网页版百度网盘直接下载大于40M文件而已,大家知道文件过大必须打开客户端才能下载,这点对于我的破电脑感觉很烦躁,每次要等待它慢悠悠打开,然后动用我的超级 ...

  3. ECSHOP安装百度编辑UEditor教程

    ECSHOP系统自带的编辑器大家用过都知道,难用不说,还不能批量上传图片.很多朋友都喜欢百度编辑器,因为百度编辑器功能强大,使用方便,而且不会生成太多多余代码.网上有许多ECSHOP整合百度编辑器的教 ...

  4. 基于百度定位及天气获取的DEMO

    demo基于百度定位APIv4.0版.新浪天气(不用查询城市代码). 需求: 1.button实现触发定位监听和天气捕获 2.两个textview 分别显示详细地址.天气. 界面很简陋,侧重功能实现. ...

  5. Android使用百度定位SDK 方法及错误处理

    之前我的项目中的位置定位使用的是基站方法,使用的Google提供的API,但是前天中午突然就不返回数据了,到网上搜了一下才知道,Google的接 口不提供服务了,基于时间紧迫用了百度现有的SDK,但是 ...

  6. Android使用百度定位SDK方法及错误处理

    下面事例是使用Android平台的部分代码.对于这个平台百度的开放人员已经写了完整的demo,把工程导入到eclipse中之后一般没有错误,如果报错的话,eclipse也会给出提示.一般可以通过将pr ...

  7. Android 百度定位SDKv4.2及6.0_百度定位实例_安卓定位实例

    介绍 由于项目需要.前几天一直在研究百度定位的功能.通过不断的实践终于有结果了.不愿意独享 现在我把我的研究成果和大家分享一下.其实百度的 API 已经相当不错了 这之所以要写出来.一是自己做一个笔记 ...

  8. Android定位开发之百度定位、高德定位、腾讯定位,三足鼎立一起为我所用!

    这几天的项目不是非常紧.于是想为未来可能要做的项目做一些技术储备. 下一个项目非常有可能是定位开发,须要用到手机定位功能,于是查了查如今比較流行的第三方定位,最火的基本上就是百度定位>高德定位& ...

  9. 百度定位SDK 返回error code : 162 latitude : 4.9E-324 lontitude : 4.9E-324

    Android应用使用百度定位SDK 返回error code : 162 latitude : 4.9E-324 lontitude : 4.9E-324 在使用百度定位SDK时遇到一个非常郁闷的问 ...

随机推荐

  1. 自定义 serializers.ValidationError 的错误返回

    在使用DRF进行反序列过程中,总是需要校验字段,然后返回错误结果.可以使用默认的自定义校验项,也可以自定义校验项.而默认的自定义校验项总是差强人意. 版本 Django 2.2.3 Python 3. ...

  2. Web应用程序自动化测试工具Selenium的主要功能有哪些?

    Selenium是一个用于Web应用程序测试的工具.是一个开源的Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium可 ...

  3. LGP2891题解

    题目大意 有 \(n\) 只奶牛,\(q\) 种食物和 \(p\) 种饮料,每只奶牛喜欢一些饮料和食物,但只能那一种,求最小配对数量. 首先来看一下这道题的简化版:没有饮料,该怎么做呢? 我会!裸的二 ...

  4. 2.3 C++STL vector容器详解

    文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...

  5. vue js计算精度问题处理,兼容XP系统

    js计算精度问题(浮点数误差,大数计算出错) JavaScript 运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果. 网上教程一大篇,原理请百度,抄作业往下看!! ...

  6. ArcGIS对进行数据拓扑修改

    空间数据处理--题目1 土地利用数据每年都在发生变化,故每年都要根据去年的数据进行修改.请根据以下要求,修改A区域的数据并对B区域已做好的数据进行拓扑检查. 一. 数据说明(见"题目1&qu ...

  7. Linux指令_入门基础

    一.基础指令语法 1.ls指令: 用法1:#ls 含义:列出当前工作目录下的所有文件/文件夹的名称. 用法2:#ls 路径 含义:列出指定路径下的所有文件/文件夹的名称 用法3:#ls 选项 路径 含 ...

  8. dotnet 6 使用 string.Create 提升字符串创建和拼接性能

    本文告诉大家,在 dotnet 6 或更高版本的 dotnet 里,如何使用 string.Create 提升字符串创建和拼接的性能,减少拼接字符串时,需要额外申请的内存,从而减少内存回收压力 本文也 ...

  9. SpringCloudAlibaba 微服务讲解(一)微服务介绍

    微服务介绍 1.1 系统架构的演变 随若互联网的发展,网站应用的规模也在不断的扩大,逬而导致系统架构也在不断的进行变化.从互联 网早起到现在,系统架构大体经历了下面几个过程:单体应用架构一蟻直应用架构 ...

  10. GitHub还能这样玩,这次我真是开了眼了

    哈喽,大家好,我是指北君. 我会一直在"开源指北"公众号给大家分享各种有趣. 实用与最前沿的开源项目,还有各种互联网干货, 今天主要给大家分享一下GitHub的一些使用技巧,帮助你 ...