zoukankan      html  css  js  c++  java
  • android百度地图定位服务

    运行效果图(注意运行前要先到设置里允许GPS权限,否则无法定位,只显示百度地图):

    首先去注册appkey,下载SDK开发包:

    创建一个Module包名为com.mingrisoft,将项目结构类型切换为Project,解压缩下载的BaiduLBS_Android-SDK_Lib.zip文件,将libs下的jar文件复制到该Module的libs文件夹中。选中这些文件,单击右键选择Add As Library...,添加百度类库。在“src/main”中新建目录JNIlibs,并将解压缩的BaiduLBS_Android-SDK_Lib.zip文件libs文件夹中剩下的文件复制到此。

            用于显示定位的图标icon_geo.png:

    manifests:
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.mingrisoft.test">
     4 
     5     //获取设备网络状态,禁用后无法获取网络状态
     6     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     7     //网络权限,当禁用后,无法进行检索等相关业务
     8     <uses-permission android:name="android.permission.INTERNET" />
     9     //读取设备硬件信息,统计数据
    10     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    11     //读取系统信息,包含系统版本等信息,用作统计
    12     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    13     //获取设备的网络状态,鉴权所需网络代理
    14     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    15     //允许sd卡写权限,需写入地图数据,禁用后无法显示地图
    16     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    17     //允许sd卡读权限,需读取地图数据,禁用后无法显示地图
    18     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    19     //获取统计数据
    20     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    21     //鉴权所需该权限获取进程列表
    22     <uses-permission android:name="android.permission.GET_TASKS" />
    23     //使用步行AR导航,配置Camera权限
    24     <uses-permission android:name="android.permission.CAMERA" />
    25     //网络定位
    26     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    27     //GPS定位
    28     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    29     <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    30     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    31 
    32     <application
    33         android:allowBackup="true"
    34         android:icon="@mipmap/ic_launcher"
    35         android:label="@string/app_name"
    36         android:roundIcon="@mipmap/ic_launcher_round"
    37         android:supportsRtl="true"
    38         android:theme="@style/AppTheme">
    39         <meta-data
    40             android:name="com.baidu.lbsapi.API_KEY"
    41             android:value="gEnaDhNCFNRRCKmc7XPM1PttGalSkeKr"/>
    42 
    43         <activity android:name=".MainActivity">
    44             <intent-filter>
    45                 <action android:name="android.intent.action.MAIN" />
    46 
    47                 <category android:name="android.intent.category.LAUNCHER" />
    48             </intent-filter>
    49         </activity>
    50     </application>
    51 
    52 </manifest>

    activity_main.xml:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout 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     tools:context=".MainActivity">
     8 
     9     <com.baidu.mapapi.map.MapView
    10         android:id="@+id/bmapview"
    11         android:layout_width="match_parent"
    12         android:layout_height="match_parent"
    13         android:clickable="true" />
    14 
    15 </RelativeLayout>
    MainActivity:
      1 package com.mingrisoft.test;
      2 
      3 import android.os.Bundle;
      4 import android.support.v7.app.AppCompatActivity;
      5 
      6 import com.baidu.location.BDLocation;
      7 import com.baidu.location.BDLocationListener;
      8 import com.baidu.location.LocationClient;
      9 import com.baidu.location.LocationClientOption;
     10 import com.baidu.mapapi.SDKInitializer;
     11 import com.baidu.mapapi.map.BaiduMap;
     12 import com.baidu.mapapi.map.BitmapDescriptor;
     13 import com.baidu.mapapi.map.BitmapDescriptorFactory;
     14 import com.baidu.mapapi.map.MapStatusUpdate;
     15 import com.baidu.mapapi.map.MapStatusUpdateFactory;
     16 import com.baidu.mapapi.map.MapView;
     17 import com.baidu.mapapi.map.MyLocationConfiguration;
     18 import com.baidu.mapapi.map.MyLocationData;
     19 import com.baidu.mapapi.model.LatLng;
     20 
     21 public class MainActivity extends AppCompatActivity {
     22 
     23     private MapView mMapView;     // 定义百度地图组件
     24     private BaiduMap mBaiduMap;   // 定义百度地图对象
     25     private LocationClient mLocationClient;  //定义LocationClient
     26     private BDLocationListener myListener = new MyLocationListener();  //定义位置监听
     27     private boolean isFirstLoc = true;  //定义第一次启动
     28     private MyLocationConfiguration.LocationMode mCurrentMode;  //定义当前定位模式
     29 
     30     @Override
     31     protected void onCreate(Bundle savedInstanceState) {
     32         super.onCreate(savedInstanceState);
     33         SDKInitializer.initialize(getApplicationContext());   //初始化地图SDK
     34         setContentView(R.layout.activity_main);
     35         mMapView = (MapView) findViewById(R.id.bmapview);  //获取地图组件
     36         mBaiduMap = mMapView.getMap();  //获取百度地图对象
     37         mLocationClient = new LocationClient(getApplicationContext());  //创建LocationClient类
     38         mLocationClient.registerLocationListener(myListener);   //注册监听函数
     39         initLocation();  //调用initLocation()方法,实现初始化定位
     40     }
     41 
     42     private void initLocation() {  //该方法实现初始化定位
     43         //创建LocationClientOption对象,用于设置定位方式
     44         LocationClientOption option = new LocationClientOption();
     45         option.setCoorType("bd09ll");  //设置坐标类型
     46         option.setScanSpan(1000);      //1秒定位一次
     47         option.setOpenGps(true);      //打开GPS
     48         mLocationClient.setLocOption(option);  //保存定位参数与信息
     49         mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL;  //设置定位模式
     50         //设置自定义定位图标
     51         BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory
     52                 .fromResource(R.drawable.icon_geo);
     53         //位置构造方式,将定位模式,定义图标添加其中
     54         MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker);
     55         mBaiduMap.setMyLocationConfigeration(config);  //地图显示定位图标
     56     }
     57 
     58     public class MyLocationListener implements BDLocationListener {  //设置定位监听器
     59         @Override
     60         public void onReceiveLocation(BDLocation location) {
     61             //销毁后不再处理新接收的位置
     62             if (location == null || mMapView == null)
     63                 return;
     64             // 构造定位数据
     65             MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())
     66                     // 此处设置开发者获取到的方向信息,顺时针0-360
     67                     .direction(100)
     68                     .latitude(location.getLatitude())
     69                     .longitude(location.getLongitude())
     70                     .build();
     71             // 设置定位数据
     72             mBaiduMap.setMyLocationData(locData);
     73 
     74             if (isFirstLoc) {  //如果是第一次定位,就定位到以自己为中心
     75                 LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); //获取用户当前经纬度
     76                 MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);  //更新坐标位置
     77                 mBaiduMap.animateMapStatus(u);                            //设置地图位置
     78                 isFirstLoc = false;                                      //取消第一次定位
     79             }
     80 
     81         }
     82     }
     83 
     84 
     85     @Override
     86     protected void onStart() {  //地图定位与Activity生命周期绑定
     87         super.onStart();
     88         mBaiduMap.setMyLocationEnabled(true);
     89         mLocationClient.start();
     90     }
     91 
     92 
     93     @Override
     94     protected void onStop() {  //停止地图定位
     95         super.onStop();
     96         mBaiduMap.setMyLocationEnabled(false);
     97         mLocationClient.stop();
     98     }
     99 
    100     @Override
    101     protected void onResume() {
    102         super.onResume();
    103         mMapView.onResume();
    104     }
    105 
    106     @Override
    107     protected void onPause() {
    108         super.onPause();
    109         mMapView.onPause();
    110     }
    111 
    112 
    113     @Override
    114     protected void onDestroy() {  //销毁地图
    115         mMapView.onDestroy();
    116         mMapView = null;
    117         super.onDestroy();
    118     }
    119 
    120 
    121 }
  • 相关阅读:
    线程池
    非XA式Spring分布式事务
    好的架构不是设计出来的,而是演进出来的
    缓存穿透
    【转】MySQL数据库主从同步管理
    setup 桌面化设置网卡
    gitlab web登入密码忘记以后可以用如下方式修改密码
    kvm与selinux
    linux下跳板机跟客户端之间无密码登陆
    LINUX下安装TeamViewer
  • 原文地址:https://www.cnblogs.com/hemeiwolong/p/12741117.html
Copyright © 2011-2022 走看看