使用Android自带的LocationManager和Location获取位置的时候,经常会有获取的location为null的情况,并且操作起来也不是很方便,在这个Demo里我使用了百度地图API中的定位SDK,可以一次性获取当前位置经纬度以及详细地址信息,还可以获取周边POI信息,同时可以设定位置通知点,当到达某一位置时,发出通知信息等方式来告知用户。jar包下载以及官方文档请参照:百度定位SDK,前提是需要注册百度开发者账号。
下面来看看定位的基本原理,目前,定位SDK可以通过GPS、基站、Wifi信号进行定位。基本定位流程如下图所示,当应用程序向定位SDK发起定位请求时,定位SDK会根据当前的GPS、基站、Wifi信息生成相对应的定位依据。然后定位SDK会根据定位依据来进行定位。如果需要,定位SDK会向定位服务器发送网络请求。定位服务器会根据请求的定位依据推算出对应的坐标位置,然后根据用户的定制信息,生成定位结果返回给定位SDK。
到官方下载jar文件后添加到工程,工程目录截图如下:
注意要把locSDK_2.4.jar添加到当天工程,右键jar文件-Build path-Add to。。。
上代码
布局文件:
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
android:orientation
=
"vertical"
>
<
Button
android:id
=
"@+id/btn_start"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:layout_marginTop
=
"20dp"
android:text
=
"Start"
/>
<
TextView
android:id
=
"@+id/tv_loc_info"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:textSize
=
"18sp"
/>
</
LinearLayout
>
配置文件:
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
manifest
xmlns:android
=
"http://schemas.android.com/apk/res/android"
package
=
"com.ericssonlabs"
android:versionCode
=
"1"
android:versionName
=
"1.0"
>
<
uses-sdk
android:minSdkVersion
=
"8"
/>
<
permission
android:name
=
"android.permission.BAIDU_LOCATION_SERVICE"
>
</
permission
>
<
uses-permission
android:name
=
"android.permission.BAIDU_LOCATION_SERVICE"
>
</
uses-permission
>
<
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
>
<
application
android:icon
=
"@drawable/ic_launcher"
android:label
=
"@string/app_name"
>
<
activity
android:name
=
".LocationDemoActivity"
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:permission
=
"android.permission.BAIDU_LOCATION_SERVICE"
android:process
=
":remote"
>
<
intent-filter
>
<
action
android:name
=
"com.baidu.location.service_v2.4"
/>
</
intent-filter
>
</
service
>
</
application
>
</
manifest
>
实现代码:
public
class
LocationDemoActivity
extends
Activity {
private
TextView locationInfoTextView =
null
;
private
Button startButton =
null
;
private
LocationClient locationClient =
null
;
private
static
final
int
UPDATE_TIME =
5000
;
private
static
int
LOCATION_COUTNS =
0
;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
locationInfoTextView = (TextView)
this
.findViewById(R.id.tv_loc_info);
startButton = (Button)
this
.findViewById(R.id.btn_start);
locationClient =
new
LocationClient(
this
);
//设置定位条件
LocationClientOption option =
new
LocationClientOption();
option.setOpenGps(
true
);
//是否打开GPS
option.setCoorType(
"bd09ll"
);
//设置返回值的坐标类型。
option.setPriority(LocationClientOption.NetWorkFirst);
//设置定位优先级
option.setProdName(
"LocationDemo"
);
//设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。
option.setScanSpan(UPDATE_TIME);
//设置定时定位的时间间隔。单位毫秒
locationClient.setLocOption(option);
//注册位置监听器
locationClient.registerLocationListener(
new
BDLocationListener() {
@Override
public
void
onReceiveLocation(BDLocation location) {
// TODO Auto-generated method stub
if
(location ==
null
) {
return
;
}
StringBuffer sb =
new
StringBuffer(
256
);
sb.append(
"Time : "
);
sb.append(location.getTime());
sb.append(
"\nError code : "
);
sb.append(location.getLocType());
sb.append(
"\nLatitude : "
);
sb.append(location.getLatitude());
sb.append(
"\nLontitude : "
);
sb.append(location.getLongitude());
sb.append(
"\nRadius : "
);
sb.append(location.getRadius());
if
(location.getLocType() == BDLocation.TypeGpsLocation){
sb.append(
"\nSpeed : "
);
sb.append(location.getSpeed());
sb.append(
"\nSatellite : "
);
sb.append(location.getSatelliteNumber());
}
else
if
(location.getLocType() == BDLocation.TypeNetWorkLocation){
sb.append(
"\nAddress : "
);
sb.append(location.getAddrStr());
}
LOCATION_COUTNS ++;
sb.append(
"\n检查位置更新次数:"
);
sb.append(String.valueOf(LOCATION_COUTNS));
locationInfoTextView.setText(sb.toString());
}
@Override
public
void
onReceivePoi(BDLocation location) {
}
});
startButton.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
if
(locationClient ==
null
) {
return
;
}
if
(locationClient.isStarted()) {
startButton.setText(
"Start"
);
locationClient.stop();
}
else
{
startButton.setText(
"Stop"
);
locationClient.start();
/*
*当所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。
*调用requestLocation( )后,每隔设定的时间,定位SDK就会进行一次定位。
*如果定位SDK根据定位依据发现位置没有发生变化,就不会发起网络请求,
*返回上一次定位的结果;如果发现位置改变,就进行网络请求进行定位,得到新的定位结果。
*定时定位时,调用一次requestLocation,会定时监听到定位结果。
*/
locationClient.requestLocation();
}
}
});
}
@Override
protected
void
onDestroy() {
super
.onDestroy();
if
(locationClient !=
null
&& locationClient.isStarted()) {
locationClient.stop();
locationClient =
null
;
}
}
}
来看看最后实现效果,点击Start后进入位置监听状态,根据设置的监听时间间隔进行定位,如果位置有变化则进行位置更新,同时显示了检测位置更新的次数,如果开启了GPS,则获取到卫星后,进行GPS定位:
相关推荐
综上所述,通过集成百度地图SDK,我们可以方便地在Android应用中获取当前经纬度。但一定要注意百度key的正确配置和效验,以确保定位服务的准确性和可靠性。同时,合理地管理和优化定位服务的使用,既能提升用户体验...
本篇文章将详细讲解如何通过百度地图API实现从地名获取经纬度的过程,并探讨如何利用这些经纬度进行定位。 首先,我们要了解经纬度的概念。经纬度是地球上地理位置的一种表示方式,经度(Longitude)是从本初子午线...
本项目“Android-Android定位基于百度基础定位sdk封装”提供了一个方便开发者使用的Android定位解决方案,它基于百度地图SDK进行封装,简化了集成过程,使得开发者能够更快速地实现定位功能。 首先,我们需要了解...
要获取当前经纬度,我们需要开启定位服务。在Android 6.0及以上版本,需要在运行时请求定位权限。然后,通过百度地图的LocationClient获取位置信息: ```java LocationClientOption option = new ...
在Android开发中,获取地理位置是常见的需求之一,而百度API提供了强大的定位服务,使得开发者能够方便地获取到设备的经纬度信息。本文将详细介绍如何在Android应用中利用百度地图API来实现这一功能。 首先,我们...
在Android应用开发中,获取设备的经纬度及街道信息是一项常用功能,这通常涉及到地理定位服务。本项目“LBStest”就是一个实例,展示了如何在Android Studio环境下利用百度地图API来实现这一目标。下面将详细讲解这...
本篇文章将深入探讨“百度地图定位获取经纬度”的技术实现和应用场景。 首先,我们要明白“百度地图定位”是百度地图API提供的一项服务,它允许开发者在应用中集成地图功能,并获取用户设备的地理位置信息。这项...
为了实现定位功能,我们需要创建一个LocationClient对象,并设置监听器来获取当前位置: ```java LocationClient locationClient = new LocationClient(this); locationClient.registerLocationListener(new ...
在Android和iOS等平台,开发者可以借助各种定位SDK来实现这一目标。本文将深入探讨如何使用百度地图的locSDK来获取当前设备的经纬度,并将其显示在界面上。 一、百度地图locSDK简介 百度地图locSDK,全称为...
使用百度定位SDK获取当前位置的经度纬度信息 部分代码片段如下: public static void locate(Application application) { // 定位服务 LocationClient mLocClient = ((Location)application)....
本文将深入探讨如何使用百度地图Android SDK来实现精准的定位服务,展示如何获取并显示用户的经纬度坐标,以及更详细的地理位置信息,如国家、省、市、区和当前街道地址。 首先,我们需要了解**百度地图Android SDK...
标题 "百度地图根据获取定位附近街道列表" 描述的是一个Android应用开发的实践,主要涉及如何利用百度地图API来获取用户当前位置并展示其周边的街道列表。在这个过程中,开发者需要集成百度地图SDK,并通过GPS或者...
开发者可以通过调用百度地图API,传入经纬度参数,实现对地球上任何位置的精准定位。这一功能在实时定位、轨迹追踪、周边服务查询等场景下非常实用。 实现百度地图经纬度定位的基本步骤如下: 1. 注册百度地图...
通过以上步骤,你可以在Android应用中实现百度地图的GPS经纬度获取功能,即使在室内也能提供相对准确的位置信息。在实际开发中,还可以结合其他功能,如路线规划、地理编码等,为用户提供更加丰富的地图体验。
本文将重点讲解如何使用百度地图SDK v3.0.0实现定位功能,并结合方向传感器来获取设备的实时朝向信息。 首先,我们需要在Android项目中集成百度地图SDK。这通常涉及以下几个步骤: 1. 在`build.gradle`文件中添加...
在Android开发中,集成百度地图并利用其定位SDK(版本v3.1)是一个常见的需求。本篇将详细探讨如何实现这一功能,包括通过GPS和网络进行定位,以及如何在地图上显示和交互用户的位置信息。 首先,我们需要在项目中...
本项目“Android-用百度地图实现了关键字搜索定位反地理编码搜索移动地图获取地图中间的经纬度”着重讲解了如何利用百度地图SDK来实现一系列关键操作,如关键字搜索、定位、反地理编码以及移动地图并获取地图中心点...
可以使用百度地图API中的LocationClient来获取当前位置。需要开启定位服务,并设置LocationListener监听位置变化。在LocationListener中,我们可以获取到经纬度、速度、精度等定位信息。 为了实现打卡功能,我们...
在Android开发中,集成百度地图API来实现定位和周边位置搜索是一项常见的功能。这个功能让应用能够为用户提供基于地理位置的服务,比如寻找附近的餐馆、商店或者导航。以下将详细讲解如何在Android应用中实现这一...
本教程将详细介绍如何在Android应用中实现百度地图的简单定位,并将获取到的经纬度及对应地址显示出来。 首先,我们需要在项目中引入百度地图SDK。在`build.gradle`文件的dependencies部分添加如下依赖: ```...