原文:Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37590688/article/details/76072563

  1. 前两天学习了一下Android的特色--LBS(基于百度地图Android SDK)。有些坑还是得填下,避免以后用到时忘记了。

一 .申请API_KEY

1)http://lbsyun.baidu.com/ :在这里注册并申请。注册之后出现应用列表

2)选择创建应用:下图所示

PS:SHA1找了我好久

按照书上面的,资料上看了,左侧选择项目目录类型project,打开右侧Gradle–>app–>android–>signingReport,发现,诶,怎么没有。。。。(黑人问号脸??),突然发现左下角有个转换的键(左下标红的地方),一按。。。,答案出来了。

3)完成

创建完成,获得API_KEY。

二 .下载百度定位SDK

下载解压后得到libs文件夹

BaiduLBS_android.jar放在project目录下的app–>libs目录下,其他目录放在app–>main–>新建文件夹比如:jniLibs下

三 .使用百度地图

1) AndroidManifest.xml

添加如下权限

  1. <!-- 这个权限用于进行网络定位-->
  2. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
  3. <!-- 这个权限用于访问GPS定位-->
  4. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
  5. <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
  6. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
  7. <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
  8. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
  9. <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
  10. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
  11. <!-- 用于读取手机当前的状态-->
  12. <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
  13. <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
  14. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
  15. <!-- 访问网络,网络定位需要上网-->
  16. <uses-permission android:name="android.permission.INTERNET" />
  17. <!-- SD卡读取权限,用户写入离线定位数据-->
  18. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

在Application标签中声明SERVICE组件,每个APP拥有自己单独的定位SERVICE

  1. <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
  2. </service>

Android定位SDK4.2及之后版本需要在Mainfest.xml正确设置Accesskey(AK),如果设置错误将会导致定位和地理围栏服务无法正常使用。设置AK,在Application标签中加入

  1. <meta-data
  2. android:name="com.baidu.lbsapi.API_KEY"
  3. android:value="AK" /> //key:开发者申请的Key

2) 新建activity:LBSwithBaidu,LBSwithBaidu代码如下:

  1. public class LBSwithBaidu extends AppCompatActivity {
  2. private TextView text;
  3. private LocationClient client;
  4. private StringBuilder connrentPosition;
  5. private MapView map;
  6. private BaiduMap baidumap;
  7. private boolean ismylocation=true;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. SDKInitializer.initialize(getApplicationContext());
  12. client = new LocationClient(getApplicationContext());
  13. client.registerLocationListener(new MylocationListener());
  14. setContentView(R.layout.activity_lbswith_baidu);
  15. text= (TextView) findViewById(R.id.textView_location);
  16. map= (MapView) findViewById(R.id.mapwithbaidu);
  17. baidumap=map.getMap();
  18. baidumap.setMyLocationEnabled(true);
  19. List<String> permission = new ArrayList<>();
  20. if (ContextCompat.checkSelfPermission(LBSwithBaidu.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
  21. permission.add(Manifest.permission.ACCESS_FINE_LOCATION);
  22. }
  23. if (ContextCompat.checkSelfPermission(LBSwithBaidu.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
  24. permission.add(Manifest.permission.READ_PHONE_STATE);
  25. }
  26. if (ContextCompat.checkSelfPermission(LBSwithBaidu.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
  27. permission.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
  28. }
  29. if (!permission.isEmpty()) {
  30. String[] permissions = permission.toArray(new String[permission.size()]);
  31. ActivityCompat.requestPermissions(LBSwithBaidu.this, permissions, 1);
  32. } else {
  33. requestion();
  34. }
  35. }
  36. private void requestion() {
  37. initlocation();
  38. client.start();
  39. }
  40. private void initlocation() {
  41. LocationClientOption option=new LocationClientOption();
  42. option.setIsNeedAddress(true);
  43. option.setScanSpan(5000);
  44. client.setLocOption(option);
  45. }
  46. @Override
  47. public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  48. switch (requestCode) {
  49. case 1:
  50. if (grantResults.length > 0) {
  51. for(int result:grantResults){
  52. if(result!=PackageManager.PERMISSION_GRANTED){
  53. Toast.makeText(this, "必须同意权限", Toast.LENGTH_SHORT).show();
  54. finish();
  55. return;
  56. }
  57. }
  58. requestion();
  59. }else {
  60. Toast.makeText(this, "发生错误", Toast.LENGTH_SHORT).show();
  61. }
  62. break;
  63. default:
  64. }
  65. }
  66. public void nagativato(BDLocation bdLocation) {
  67. if (ismylocation) {
  68. LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude());
  69. Log.d("pipa",bdLocation.getLatitude()+"::"+ bdLocation.getLongitude());
  70. MapStatusUpdate updata = MapStatusUpdateFactory.newLatLng(ll);
  71. baidumap.animateMapStatus(updata);
  72. updata = MapStatusUpdateFactory.zoomTo(16f);
  73. baidumap.animateMapStatus(updata);
  74. ismylocation = false;
  75. }
  76. MyLocationData.Builder loBuilder=new MyLocationData.Builder().latitude(bdLocation.getLatitude())
  77. .longitude(bdLocation.getLongitude());
  78. MyLocationData locationData=loBuilder.build();
  79. baidumap.setMyLocationData(locationData);
  80. }
  81. public class MylocationListener implements BDLocationListener {
  82. @Override
  83. public void onReceiveLocation(BDLocation bdLocation) {
  84. if(bdLocation.getLocType()==BDLocation.TypeGpsLocation||bdLocation.getLocType()==BDLocation.TypeNetWorkLocation){
  85. nagativato(bdLocation);
  86. }
  87. connrentPosition = new StringBuilder();
  88. connrentPosition.append("纬度:").append(bdLocation.getLatitude()).append("\n");
  89. connrentPosition.append("经度:").append(bdLocation.getLongitude()).append("\n");
  90. connrentPosition.append("国家:").append(bdLocation.getCountry()).append("\n");
  91. connrentPosition.append("省:").append(bdLocation.getProvince()).append("\n");
  92. connrentPosition.append("市:").append(bdLocation.getCity()).append("\n");
  93. connrentPosition.append("县:").append(bdLocation.getDistrict()).append("\n");
  94. connrentPosition.append("街道:").append(bdLocation.getStreet()).append("\n");
  95. connrentPosition.append("定位方式:");
  96. if (bdLocation.getLocType() == BDLocation.TypeGpsLocation) {
  97. connrentPosition.append("GPS");
  98. } else if (bdLocation.getLocType() == BDLocation.TypeNetWorkLocation) {
  99. connrentPosition.append("网络定位");
  100. }
  101. runOnUiThread(new Runnable() {
  102. @Override
  103. public void run() {
  104. text.setText(connrentPosition);
  105. }
  106. });
  107. }
  108. @Override
  109. public void onConnectHotSpotMessage(String s, int i) {
  110. }
  111. }
  112. @Override
  113. protected void onResume() {
  114. super.onResume();
  115. map.onResume();
  116. }
  117. @Override
  118. protected void onPause() {
  119. super.onPause();
  120. map.onPause();
  121. }
  122. @Override
  123. protected void onDestroy() {
  124. super.onDestroy();
  125. client.stop();
  126. map.onDestroy();
  127. baidumap.setMyLocationEnabled(false);
  128. }
  129. }

效果图:



Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK的更多相关文章

  1. Android学习之基础知识十四 — Android特色开发之基于位置的服务

    一.基于位置的服务简介 LBS:基于位置的服务.随着移动互联网的兴起,这个技术在最近的几年里十分火爆.其实它本身并不是什么时髦的技术,主要的工作原理就是利用无线电通讯网络或GPS等定位方式来确定出移动 ...

  2. LBS(Location Based Service)(基于位置的服务)

    LBS(Location Based Service)(基于位置的服务) Android 中定位方式基本可以分为两种:GPS定位,网络定位. GPS定位的工作原理是基于手机内置的GPS硬件直接和卫星进 ...

  3. LBS 基于位置的服务

    LBS (Location Based Services)基于位置的服务 基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如GSM网.CDMA网)或外部定位方式(如GPS)获取移动终端用户的位 ...

  4. 百度地图android客户端的AndroidMainfest.xml的学习和android版本号

    平时写android产品相关的东西接触比较少,于是找个例子学习下. 众所周知,Apk文件是可以反编译的,虽然看不到代码,xml还是可见的. 把百度地图android客户端反编译之后,来学习下它的And ...

  5. 百度地图 Android SDK - 检索功能使用的简单演示样例

    百度地图 SDK 不仅为广大开发人员提供了炫酷的地图展示效果.丰富的覆盖物图层,更为广大开发人员提供了多种 LBS 检索的能力. 通过这些接口,开发人员能够轻松的訪问百度的 LBS 数据,丰富自己的移 ...

  6. 百度地图 Android SDK - 新的版本号(v3.2.0)正式上线

    百度地图 Android SDK v3.2.0 在版本号 2014 年 11 月 07 日本正式推出工作完成! watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQ ...

  7. 百度地图 Android SDK - Hello Baidu Map

    例如,给广大以下主要开发者介绍了如何使用百度地图Android SDK构造的主应用程序的地图! 第一步.创建Androidproject,将百度地图Android SDK的开发包导入到project对 ...

  8. 百度地图 Android SDK - 标注(Marker)的基本使用

    标注(Marker)是开发人员最常使用的地图覆盖物志一.今天就来向大家介绍一些标注(Marker)的最基本用法! 实现目标: 1.构建基础地图页面: 2.在地图的中心点处加入 Marker: 3.实现 ...

  9. 基于位置的服务——百度地图SDK练习

    基于位置的服务所围绕的核心就是要先确定出用户所在的位置.通常有两种技术方式可以实现:一种是通过GPS定位,一种是通过网络定位.Android对这两种定位方式都提供了相应的API支持.但由于众所周知的原 ...

随机推荐

  1. 云应用开发之新浪SAE读写云端数据库MySQL

    本博文为前篇博文新浪云应用SAE日志查看的延续. 在读写云数据库MySQL之前,须要说明的是,在新浪云平台上使用数据库时.该平台默认会为每个应用单独新建一个数据库database实例.在该实例中再创建 ...

  2. Eclipse下配置Ant脚本 自己主动打包带签名的Android apk

    尽管eclipse非常少用了,可是在古老的项目上还是会用到.一个麻烦事是打带签名包的时候.非常不方便.下边纪录下配置ant,自己主动打包带签名apk的过程,作为备忘.(PC环境为MAC) 1,第一步得 ...

  3. 阿里云OSS工具类

    [前言] 我们上家公司的存储系统用的是FastDFS(智能一代云平台(二十八):对前后端分离和FastDFS的使用的再理解):现在在职的公司用的是阿里云的OSS(OSS的官方文档),在工作的时候整理一 ...

  4. PatentTips - Method and system for browsing things of internet of things on ip using web platform

    BACKGROUND The following disclosure relates to a method and system for enabling a user to browse phy ...

  5. 【9107】Hanoi双塔问题(NOIP2007)

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的 ...

  6. Android 让文本输入框默认不获取焦点

    项目中有个检索功能,页面上有个EditText输入框,打开页面后,焦点默认在EditText上,这样的话软键盘默认就会显示出来,占据大半个屏幕. 后来想办法将这个给去掉了,原先考虑着将焦点赋给页面上的 ...

  7. ITFriend创业败局(五):创业可以停止,公司必须注销,不然后果很严重

    马上又要继续出来创业做事了,想到要注册公司,有个麻烦事. 事情得回到2014年9月. 当时,由于各种因素,决定放弃ITFriend,当然也放弃了原来了公司.先是,咨询了横德瑞的陈总,关于公司注销的事. ...

  8. 前端调用百度API

    <!DOCTYPE html> <html> <head>         <meta charset="UTF-8">       ...

  9. android应用开发 button显示两行文本

    自己写了个电话拨号器的程序给男朋友玩,用来专门打我的手机号,为了把界面做的好看一点,须要用到显示两行文本的button.在网上搜罗了两种方法,记录在以下.跟大家一起分享一下,希望能帮到须要的人. 方法 ...

  10. 轮询方法FileSystemWatcher

    具体实现 FileSystemWatcher watcher = new FileSystemWatcher(WriteBackDir, "*result.txt"); watch ...