基于Android实现百度地图定位过程详解

作者:mrr 时间:2021-06-12 20:55:34 

一、问题描述

LBS位置服务是android应用中重要的功能,应用越来越广泛,下面我们逐步学习和实现lbs相关的应用如定位、地图、导航等,首先我们看如何基于百度地图实现定位功能

二、配置环境

1、注册密钥:地址http://developer.baidu.com/map/

2、下载定位SDK,并导入SDK如图所示:

 基于Android实现百度地图定位过程详解

三、编写MyApplication类

编写MyApplication类,为了使用方便我们可以将实现定位的方法封装的Application组件中

封装下列方法

1、  获取定位信息——requestLocationInfo()

2、  通过广播发送位置信息——sendBroadCast()

3、  停止定位——stopLocationClient()


public class MyApplication extends Application{
 public LocationClient mLocationClient = null;
 public GeofenceClient mGeofenceClient;
 public MyLocationListenner myListener = new MyLocationListenner();
 public static String TAG = "MyApplication";
 private static MyApplication mInstance = null;
 @Override
 public void onCreate(){
   mInstance = this;
   mLocationClient = new LocationClient(this);
   /**
    * 项目的key,自己到官网申请 http://lbsyun.baidu.com/apiconsole/key
    */
   mLocationClient.setAK("你的应用Key");
   mLocationClient.registerLocationListener(myListener);
   mGeofenceClient = new GeofenceClient(this);
   super.onCreate();
   Log.d(TAG, "... Application onCreate... pid=" + Process.myPid());
 }
 public static MyApplication getInstance(){
   return mInstance;
 }
 /**
  * 停止定位
  */
 public void stopLocationClient(){
   if (mLocationClient != null && mLocationClient.isStarted()){
     mLocationClient.stop();
   }
 }
 /**
  * 发起定位
  */
 public void requestLocationInfo(){
   setLocationOption();
   if (mLocationClient != null && !mLocationClient.isStarted()){
     mLocationClient.start();
   }
   if (mLocationClient != null && mLocationClient.isStarted()){
     mLocationClient.requestLocation();
   }
 }
 /**
  * 设置百度地图的相关参数
  */
 private void setLocationOption(){
   LocationClientOption option = new LocationClientOption();
   option.setOpenGps(true); // 打开gps
   option.setCoorType("bd09ll"); // 设置坐标类型
   option.setServiceName("com.baidu.location.service_v2.9");
   option.setPoiExtraInfo(true);
   option.setAddrType("all");
   option.setPoiNumber(10);
   option.disableCache(true);
   mLocationClient.setLocOption(option);
 }
 /**
  * 监听函数,有更新位置的时候,格式化成字符串,输出到屏幕中
  */
 public class MyLocationListenner implements BDLocationListener
 {
   @Override
   public void onReceiveLocation(BDLocation location){
     if (location == null){
       sendBroadCast("定位失败!");
       return;
     }
     sendBroadCast(location.getAddrStr());
   }
   public void onReceivePoi(BDLocation poiLocation){
     if (poiLocation == null){
       sendBroadCast("定位失败!");
       return;
     }
     sendBroadCast(poiLocation.getAddrStr());
   }
 }
 /**
  * 得到发送广播
  * @param address
  */
 public void sendBroadCast(String address){
       stopLocationClient();
   Intent intent = new Intent(MainActivity.LOCATION_BCR);
   intent.putExtra("address", address);
   sendBroadcast(intent);
 }
}

三、 主程序MainActivity


public class MainActivity extends Activity{
 public static String TAG = "LocTestDemo";
 private BroadcastReceiver broadcastReceiver;
 public static String LOCATION_BCR = "location_bcr";
 private Button locBtn;
 private TextView locInfo;
 private MyApplication application;
 @Override
 protected void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   application=(MyApplication)super.getApplication();
   initialize();
   initializeViews();
   initializeListeners();
 }
 private void initialize(){
   registerBroadCastReceiver();//注册广播
 }
 private void initializeViews()
 {
   locBtn = (Button) findViewById(R.id.location);
   locInfo = (TextView) findViewById(R.id.location_info);
 }
 private void initializeListeners()
 {
   locBtn.setOnClickListener(new OnClickListener(){
     @Override
     public void onClick(View v){
       locInfo.setText("定位中...");
     //调用请求定位信息
     application.requestLocationInfo();
     }
   });
 }
 /**
  * 注册一个广播,监听定位结果,接受广播获得地址信息
  */
 private void registerBroadCastReceiver()
 {
   broadcastReceiver = new BroadcastReceiver(){
   public void onReceive(Context context, Intent intent){
     String address = intent.getStringExtra("address");
       locInfo.setText(address);
     }
   };
   IntentFilter intentToReceiveFilter = new IntentFilter();
   intentToReceiveFilter.addAction(LOCATION_BCR);
   registerReceiver(broadcastReceiver, intentToReceiveFilter);
 }
 @Override
 protected void onDestroy(){
   super.onDestroy();
   unregisterReceiver(broadcastReceiver);
 }
}

四、 AndroidManifest.xml配置信息


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.jereh.baidulocation"
 android:versionCode="1"
 android:versionName="1.0" >
 <uses-sdk
   android:minSdkVersion="8"
   android:targetSdkVersion="17" />
 <application
   android:name="com.jereh.baidulocation.MyApplication"
   android:allowBackup="true"
   android:icon="@drawable/ic_launcher"
   android:label="@string/app_name"
   android:theme="@style/AppTheme" >
   <activity
     android:name="com.jereh.baidulocation.MainActivity"
     android:label="@string/app_name" >
     <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
   </activity>
   <service
     android:name="com.baidu.location.f"
     android:enabled="true"
     android:process=":remote" >
     <intent-filter>
       <action android:name="com.baidu.location.service_v2.2" >
       </action>
     </intent-filter>
   </service>
 </application>
 <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" />
</manifest>
标签:android,百度地图,定位
0
投稿

猜你喜欢

  • 将应用程序进行Spring6迁移的最佳使用方式

    2021-08-28 12:03:58
  • 一篇文章带你复习java知识点

    2023-01-15 09:39:38
  • 关于JAVA11中图片与BASE64相互转换的实现

    2022-12-06 06:44:11
  • 详谈C++引用&和指针在作为形参时的区别

    2023-12-13 16:50:49
  • 1秒钟实现Springboot 替换/写入 word文档里面的文字、图片功能

    2022-05-08 18:35:48
  • java中实现分页的几种常见方式总结

    2021-12-24 13:32:49
  • C# Winform按钮中图片实现左图右字的效果实例

    2022-05-01 12:51:41
  • Mybatis 入参类型方式全面详解

    2023-10-16 20:03:40
  • Android学习之AppWidget笔记分享

    2022-04-10 21:25:46
  • Mybatis在sqlite中无法读写byte[]类问题的解决办法

    2021-08-06 21:06:07
  • java如何获取本地操作系统进程列表

    2022-12-05 13:35:20
  • spring boot集成smart-doc自动生成接口文档详解

    2023-11-28 23:08:02
  • C#多线程系列之任务基础(三)

    2023-10-08 13:43:34
  • 深入理解Android中的建造者模式

    2023-06-27 05:55:17
  • Unity Shader实现线框效果的制作步骤

    2023-10-10 06:14:54
  • 图文详解Maven工程打jar包的N种方式

    2022-12-12 21:36:23
  • 浅谈利用Session防止表单重复提交

    2022-02-08 00:45:42
  • spring cloud alibaba Nacos 注册中心搭建过程详解

    2022-07-08 17:38:01
  • 浅谈JAVA 内存流的实现

    2021-06-28 05:43:59
  • 详解C#如何实现分割视频

    2022-12-07 10:48:23
  • asp之家 软件编程 m.aspxhome.com