基于Android实现百度地图定位过程详解
作者:mrr 发布时间:2021-06-12 20:55:34
标签:android,百度地图,定位
一、问题描述
LBS位置服务是android应用中重要的功能,应用越来越广泛,下面我们逐步学习和实现lbs相关的应用如定位、地图、导航等,首先我们看如何基于百度地图实现定位功能
二、配置环境
1、注册密钥:地址http://developer.baidu.com/map/
2、下载定位SDK,并导入SDK如图所示:
三、编写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>


猜你喜欢
- 一、判断一个字符串str不为空的方法有:1、str == null;2、"".equals(str);3、str.len
- 1、如何添加listBox的值this.listBox1.Items.Add("张晓东");2、如何判断listBox集
- 介绍环境配置Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEcl
- 一、HttpBasic模式的应用场景HttpBasic登录验证模式是Spring Security实现登录验证最简单的一种方式,也可以说是最
- 1、什么是 ThreadLocal:ThreadLocal,即线程本地变量,如果你创建了一个变量,那么访问这个变量的每个线程都会有这个变量的
- 本文实例为大家分享了java实现邮件发送的具体代码,供大家参考,具体内容如下1.使用socket通信功能实现java的邮件传输1.1 什么是
- Swing包的介绍Java基础类数据库(Java Foundation Class)给java应用程序增加了图形界面、丰富的功能性以及与用户
- 前言对于多线程,大家应该很熟悉。但是,大家了解线程池吗?今天,我将带大家全部学习关于线程池的所有知识。目录1. 简介2. 工作原理2.1 核
- 若 Spring 检测到 bean 实现了 Aware 接口,则会为其注入相应的依赖。所以通过让bean 实现 Aware 接口,则能在 b
- 看到题目后,分析了下, 10的阶乘就已经很大了。计算出来再得到这个末尾的0的个数,完全不现实,即使实现了也是很麻烦的。后来想某个数的阶乘中乘
- @Resource和@Autowired是Spring Framework中两种常用的注入方式,它们的作用是在Spring容器中自动装配Be
- 你还在生产节点开放Swagger吗,赶紧停止这种暴露接口的行为吧。学习目标快速学会使用注解关闭Swagger2,避免接口重复暴露。使用教程禁
- 一、递归概念递归本质:程序调用自身的编程技巧叫做递归。程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言
- 概述日常工作中,我们经常会有发送 HTTP 网络请求的需求,概括下我们常见的发送 HTTP 请求的需求内容:可以发送基本的 GET/POST
- 前言 SpringCloud 是微服务中的翘楚,最佳的落地方案。 在微服务架构中多层服务之间会相互调用,如果其中有一
- 本文实例为大家分享了java pdf加水印的具体代码,供大家参考,具体内容如下引入依赖<dependency> <grou
- Maven工程pom定义jdk版本今天把之前做的项目导进eclipse,然后发现报错,一些类在1.6中不支持,需要将JDK版本设置为1.7,
- 一、前言最近接到一个任务,需要爬取五级行政区划的所有数据(大概71万条数据在),需要爬取的网站:行政区划 - 行政区划代码查询 发
- Android动画 实现开关按钮动画(属性动画之平移动画),最近做项目,根据项目需求,有一个这样的功能,实现类似开关的动画效果,经过自己琢磨
- 这次我们来说一下hibernate的层次设计,层次设计也就是实体之间的继承关系的设计。 也许这样比较抽象,我们直接看例子。&nbs