2015.12.02 -
挑简单的抄,以对(百度)地图来一个基础的认知。
平台。
Windows 10
Android Studio 1.5
百度地图AndroidSDK(开发指南): http://developer.baidu.com/map/index.php?title=androidsdk
Android类参考:http://developer.android.com/reference/packages.html
2015.12.02
1. 创建Android工程
打开AS –> Start a new Android Studio Project
- Application name:LearnBdMapBasic
- Company Domain:xndx
–> Next
- Phone and Tablet,Minimum SDK - API 15: Android 4.0.3(IceCreamSandwich)
–> Next
- Empty Activity
–> Next
- Activity Name: BdMapMainActivity
- Layout Name: activity_bdmap_main
–> Finish
通过AS将LearnBdMapBasic程序下载(pAdPt-0 Android平台(jdk + AS)搭建 - 真机调试)到Android手机上运行,程序显示“Hello World!”。
2. 在AS中搭建百度地图AndroidSDK环境
2.1 申请密钥
需要申请密钥后,才可使用百度地图Android SDK。在百度地图AndroidSDK官网申请密钥需要SHA1和应用程序包名,提交二者得到的访问应用(AK)值即为密钥。
(1) 获取数字签名(SHA1)
将.LearnBdMapBasic\app\build\outputs\apk目录下的app-debug.apk文件的后缀更改为.zip,然后对app-debug.zip文件解压。打开cmd,进入.app-debug\META-INF目录,使用“keytool -printcert -file CERT.RSA”命令得到SHA1。
(2) 应用程序包名
.LearnBdMapBasic\app\src\main\AndroidManifest.xml中的package值即为应用程序报名。
2.2 百度地图Android SDK环境
(1) 下载需要的百度地图Android SDK
可在百度地图Android SDK的下载页面下载到最新版的地图SDK。[ 根据我的习惯,在此页面中点击自定义下载 ,下载基础地图的“开发包”、“示例代码”以及“类参考”]。
解压下载的BaiduLBS_AndroidSDK_Lib.zip,根据readme.txt得知基础地图的版本为v.3.6.1。
(2) 导入.jar和.so包到AS的Android工程中
- 导入.jar包。将.BaiduLBS_AndroidSDK_Lib\libs\BaiduLBS_Android.jar拷贝到.LearnBdMapBasic\app\libs目录下。并在AS中,菜单栏选择File->Project Structor->Modules->Dependencies,点击+号,选择File dependency,选择BaiduLBS_Android.jar包导入。
- 拷贝.so包。在.LearnBdMapBasic\app\src\main目录下新建jniLibs目录,将.BaiduLBS_AndroidSDK_Lib\libs\目录下的包含.so的目录拷贝到jniLibs目录下。
3. 显示百度地图视图
3.1 在AndroidManifest.xml的application中添加开发密钥
<application …… >
<!-- 百度基础地图开发密钥 -->
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="mv6ASA0gMoDPyFjQtnUgqBXz"/><!--开发者 key-->
……
</application>
3.2 在AndroidManifest.xml的manifest中添加基础地图所需权限
<!-- 百度基础地图所需权限-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
解释MapView为何需要这些权限。
3.3 使用MapView显示百度地图视图
使用静态的方式显示百度地图控件。
(1) 声明MapView控件
activity_bd_map_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical"
...>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello Map!" />
<!-- 显示百度地图视图控件 -->
<com.baidu.mapapi.map.MapView
android:id="@+id/bdMapView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.baidu.mapapi.map.MapView>
</LinearLayout>
MapView
一个显示地图的视图(View)。它负责从服务端获取地图数据。它将会捕捉屏幕触控手势事件。 使用这个类必须按照它的生命周期进行操控,你必须参照以下方法onCreate(Bundle)、 onResume()、onPause()、onDestroy()。等声明周期函数。在使用地图组件之前请确保已经调用了 SDKInitializer.initialize(Context) 函数以提供全局 Context 信息。——[.BaiduLBS_AndroidSDK_Docs\BaiduMap_AndroidSDK_v3.6.1_Docs\doc\index.xml - 所有类-MapView ]
(2) 加载MapView显示百度地图视图
BdMapMainActivity.java
package xndx.learnbdmapbasic;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;
public class BdMapMainActivity extends AppCompatActivity {
private MapView bdMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_bd_map_main);
//载入MapView对象
bdMapView = (MapView)this.findViewById(R.id.bdMapView);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
bdMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
bdMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
bdMapView.onPause();
}
}
主活动BdMapMainActivity启动时,自动运行onCreate()方法。当从布局文件中载入MapView控件时就相当于实现了一个MapView对象(构造函数会运行) - 从百度服务端取地图数据从而显示地图。百度地图的生命跟主活动的生命周期保持一致步伐,跟主活动同生同死。
通过AS将程序下载到Android手机上运行,运行结果如下。
图1. 显示百度地图视图
显示百度地图的AS版练习代码地址:LearnBdMapBasic1-3。
2015.12.03
4. 百度地图一般事件监听
使用百度地图AndroidSDK时,“密钥不对”、“未联网”都不能显示百度地图视图。尤其对于后者,当用户使用地图未联网时应该给予提示。对于Android程序来说,需要检测“密钥不对”、“未联网”这些事件,检测到后再给出相应的提示。看开发指南,是使用了Android的广播监听(接收)类BroadcastReceiver 完成的“百度地图事件监听”工作。这里主要是想监听到“密钥不对”以及“未联网”两个事件来学习此类的使用,这两个事件也是目前所需的。
4.1 广播监听类参考
在Android类参考网页的右上角搜“BroadcastReceiver”。
BroadcastReceiver
用于代码中以接收由sendBroadcast()发送的意图。
可在代码中(.java文件中)用Context.registerReceiver()方法动态地注册此类的实例,也可在清单文件AndroidManifest.xml中的receiver标签下静态注册此类。[看个动态注册和静态注册的实例]
注:若在Activity.onResume()实现中注册此类实例,那应该在Activity.onPause()注销此类实例。(在活动暂停时不需接收意图,并且这会减少必要的系统消耗)。不要在Activity.onSaveInstanceState()中注销此类,因为当用户回到历史堆上时此方法不会被调用。
接收器生命周期。
BroadcastReceiver对象只在调用onReceive(Context, Intent)的期间有效。一旦代码从此函数中返回,系统将会认为此对象结束并不再活跃。
在onReceive(Context, Intent)实现中能做什么响应很重要:任何异步操作不能包含其中,因为异步操作需要从此函数中返回处理异步操作,但函数返回时BroadcastReceiver已不存在,如此系统会在异步操作完成之前杀死BroadcastReceiver所在的进程。
尤其是,在BroadcastReceiver内部能展示对话框或绑定服务。对于前者,可以使用NotificationManager API;对于后者,可以使用Context.startService()来给服务发送命令。
进程生命周期。
当前执行BroadcastReceiver(即运行onReceive(Context, Intent)方法内的代码)的进程应该是一个前台进程,并且应该让系统保持它的运行(除非内存等极端问题)。
一旦从onReceive()函数返回时,BroadcastReceiver就不再活跃,它所在的进程将会运行其他的组件。若某进程内只运行BroadcastReceiver,当从onReceive()函数返回后系统会认为此进程为空就会将此进程杀死(将资源留给其它更需要资源的进程)。
这就意味着欲长期运行,就需要结合一个服务给BroadcastReceiver以让它们的进程一直保持活跃。
onRecive(Context context, Intent intent)方法。
此方法在BroadcastReceiver收到意图广播时会被自动调用。BroadcastReceiver会自动接收由sendBroadcast()发送的意图。当此方法运行在主线程中时不应该执行耗时的操作(在此函数中耗时10s就会被认为接收器阻塞,接收器就会列入被杀名单中),在onReceive()中也不应该启动组对话框。
参数
Context 接收器所运行的上下文[给个博客参考下Android中Context含义],次处的Context跟。
intent 欲接收的意图。
Context.registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
在主活动中注册BroadcastReceiver实例来运行,当在主应用程序线程中匹配到与filter一致的意图时,receiver就会被调用(调用onReceive()方法)。[ 向密钥失败和未联网事件由系统发出(系统调用sendBroadcast系类函数)]
读一次BroadcastReceiver类参考也没多大感觉。还是结合“百度地图开发指南-事件监听”将代码揉入Android工程中测试一下。
4.2 动态注册广播接收实例 & 监听密钥失败和网络错误事件
动态注册广播接收器类使用Context.registerReceiver()方法,需要两个条件:BroadcastReceiver实例IntentFilter。和因为要重新实现广播接收类中的onReceive()函数,所以可以在程序中实现一个扩展于BroadcastReceiver类的同时重新实现onReceive()。
(1) 重新实现onReceive()方法的扩展BroadcastReceiver的类
BdMapMainActivity.java
……
public class BdMapMainActivity extends AppCompatActivity {
private MapView bdMapView = null;
private TextView tTipForBdMap = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
…...
//载TextView对象
tTipForBdMap = (TextView)this.findViewById(R.id.tTipForBdMap);
}
…...
/*扩展广播监听类BroadcastReceiver,实现onReceive()方法*/
public class BdMapSDKReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//获取接收到的意图
String action = intent.getAction();
//检测广播意图是否为百度地图权限验证失败的广播
if (action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
tTipForBdMap.setText("百度地图key验证失败,请检查AndroidManifest.xml中key值");
//没有联网的广播
} else if (action.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {
tTipForBdMap.setText("请开启设备网络连接(Wi-Fi)");
//百度Android SDK密钥验证成功
}else if (action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) {
tTipForBdMap.setText("key + NetWork Well, BaiduMap:");
}
}
}
}
检测百度地图密钥验证失败和网络错误的值都在SDKInitializer类中。[.BaiduLBS_AndroidSDK_Docs\BaiduMap_AndroidSDK_v3.6.1_Docs\doc\index.xml - com.baidu.mapapi - SDKInitializer]
R.id.tTipForBdMap为原显示“Hello World!”字符串的TextView控件。
(2) IntentFilter实例
BdMapMainActivity.java
……
public class BdMapMainActivity extends AppCompatActivity {
……
private IntentFilter bdiFilter = null;
private BdMapSDKReceiver bdMapSDKReceiver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
......
/*百度地图广播监听实例、欲监听的广播事件*/
bdMapSDKReceiver = new BdMapSDKReceiver();
bdiFilter = new IntentFilter();
bdiFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
bdiFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK);
bdiFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
}
......
}
选择在活动的onCreate()方法中实例IntentFilter和BroadcastReceiver对象。
(3) 注册和注销广播监听
BdMapMainActivity.java
……
public class BdMapMainActivity extends AppCompatActivity {
......
@Override
protected void onCreate(Bundle savedInstanceState) {
......
}
/*-------------------管理百度地图生命周期-------------------*/
……
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
bdMapView.onResume();
//注册百度地图广播监听
registerReceiver(bdMapSDKReceiver, bdiFilter);
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
bdMapView.onPause();
//注销百度地图监听广播
unregisterReceiver(bdMapSDKReceiver);
}
/*-------------------管理百度地图生命周期-------------------*/
......
}
选择在活动的onResume()和onPause()阶段分别注册、注销百度地图的广播监听。
(4) 验证百度地图的密钥错误和未联网事件监听
将清单文件中的百度地图Android SDK密钥修改为一个随机的字符串后下载程序到Android手机(连上Wi-Fi,程序第一次下载并安装时也需要联网验证密钥,不联网密钥也会验证失败)上运行:
图2. 监听百度地图Android SDK密钥验证失败事件
恢复正确密钥 + 连Wi-Fi:
图3. 恢复正确密钥正确显示百度地图视图 - 并监听到百度地图Android SDK密钥验证成功
正确密钥 + 不联网:
图4. 未能监听到未开启联网事件
未能够检测到未联网的状态(显示网络和密钥都OK但未从百度服务器上获取百度地图数据显示 - 取而代之显示的是方格子)。修改程序内容检测未联网状态 – 怀疑SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR网络错误广播不是指未联网事件广播。现将此广播下的提示改为“网络错误”。
(5) 管理网络连接状态 - 提示百度地图视图不能显示的未联网的原因
安卓中管理网络连接状态的是ConnectivityManager类。查其类参考。
ConnectivityManager
此类响应对网络连接状态的查询。当网络连接改变时此类也会通知应用程序。通过调用Context.getSystemService(Context.CONNECTIVITY_SERVICE)可以得到该类实例。
此类主要负责以下几个功能:
监控网络连接(Wi-Fi,GPRS,UMTS等)
- 当网络连接改变时发送广播
- 当某个网络断开时尝试“故障切换”连接到另外一个网络
- 提供API来供应用程序查询可用网络的粗、细粒度
- 提供API来供应用程序请求和选择连接网络来传输数据
在百度地图验证密钥成功后检测当前是否有连接网络。
BdMapMainActivity.java
……
public class BdMapMainActivity extends AppCompatActivity {
......
private ConnectivityManager bdConnManager = null;
……
/*扩展广播监听类BroadcastReceiver,实现onReceive()方法*/
public class BdMapSDKReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
…...
//百度Android SDK密钥验证成功
}else if (action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) {
tTipForBdMap.setText("key有效 + 有NetWork连接[有流量的话,BaiduMap:]");
/* 检查当前是否连接有网络 */
if (!isNetworkConnected(context)) {
tTipForBdMap.setText("请连接网络");
}
}
}
}
/* 检查当前是否连接有网络 */
public boolean isNetworkConnected(Context context) {
if (context != null) {
bdConnManager= (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = bdConnManager.getActiveNetworkInfo();
if (networkInfo == null) return false;
}
return true;
}
关闭Android设备网络连接,将程序下载到Android设备中运行,结果如下:
图5. 百度地图密钥验证通过无网络连接时的提示
在上图状态下恢复Android设备网络连接,获得百度地图视图新状态:
图6.恢复网络连接时,百度地图视图显示,但连接网络提示未变
当连接到网络时,在TextView视图中的提示应该改变,这可以通过监听当有网络接入时更改提示。
BdMapMainActivity.java
......
public class BdMapMainActivity extends AppCompatActivity {
......
@Override
protected void onCreate(Bundle savedInstanceState) {
......
/* 为广播监听添加监听事件 */
addIntentFilterAction();
}
......
/*扩展广播监听类BroadcastReceiver,实现onReceive()方法*/
public class BdMapSDKReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//获取接收到的意图
String action = intent.getAction();
……
//网络连接改变
} else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
if (!isNetworkConnected(context)) {
tTipForBdMap.setText("网络连接关闭");
} else if (isNetworkConnected(context)) {
tTipForBdMap.setText("key有效 + 有NetWork连接[有流量的话,BaiduMap:]");
}
}
}
}
/* 为广播监听添加监听事件 */
private void addIntentFilterAction() {
bdiFilter= new IntentFilter();
//百度地图
bdiFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
bdiFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK);
bdiFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
//网络
bdiFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
}
……
}
往BdMapMainActivity.java文件中加入监听ConnectivityManager.CONNECTIVITY_ACTION广播后,当网络连接发生改变时,系统就会发出ConnectivityManager.CONNECTIVITY_ACTION广播,在onResume()中注册的广播监听实例就能够接收到此广播。根据此广播就能够改变文本显示控件的内容 - 有网络接入或连接的网络发生改变时,广播监听器都能够监听到从而进入程序中的“网络连接分支中”。
“密钥验证失败和未连网提示”的AS版练习代码地址:LearnBdMapBasic4。
2015.12.04
5. 百度基础地图
不含开发指南中提到的“地图类型”、“实时交通图”、“百度城市热力图”、“地图标注”、“检索结果覆盖物”、“OpenGL”、“TextureMapView渲染”、“瓦片图层”等块。以后若用再验。
5.1 简介
开发者可利用SDK提供的接口,使用百度提供的基础地图数据。目前百度地图SDK提供的地图等级为3 - 19级。所有叠加或覆盖到地图的内容被统称为地图覆盖物(如标注、矢量图形元素、定位图等)。百度地图SDK为开发者提供的基础地图和上面的各种覆盖物元素,具有一定的层级压盖关系,具体如下(从下至上的顺序):
[1] 基础底图(包括底图、底图道路、卫星图等);
[2] 瓦片图层(TileOverlay);
[3] 地形图图层(GroundOverlay);
[4] 热力图图层(HeatMap);
[5] 实时路况图图层(BaiduMap.setTrafficEnabled(true););
[6] 百度城市热力图(BaiduMap.setBaiduHeatMapEnabled(true););
[7] 底图标注(指的是底图上面自带的那些POI元素);
[8] 几何图形图层(点、折线、弧线、圆、多边形);
[9] 标注图层(Marker),文字绘制图层(Text);
[10] 指南针图层(当地图发生旋转和视角变化时,默认出现在左上角的指南针);
[11] 定位图层(BaiduMap.setMyLocationEnabled(true););
[12] 弹出窗图层(InfoWindow);
[13] 自定义View(MapView.addView(View););
源文档 http://developer.baidu.com/map/index.php?title=androidsdk/guide/basicmap
5.2 标注覆盖物 - 层9
可利用标注覆盖物在地图指定位置上添加标注信息。
(1) 标注
新建BdMapBasicLevelApplication.java。
package xndx.learnbdmapbasic;
import android.app.Application;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
/**
* Created by lxr on 2015/12/4.
* 通过百度地图SDK接口简单操作百度地图的基础图层
*/
public class BdMapBasicLevelApplication extends Application {
private BaiduMap bdMap = null;
/* 获取地图控制器 */
public boolean getBdMapControl(MapView mapView) {
if (mapView != null) {
bdMap = mapView.getMap();
return true;
}
return false;
}
/* 百度地图标注(Marker)、文字绘制(Text)图层 */
public void markTextBdMapLevel() {
if (bdMap != null) {
//定义Marker坐标
LatLng point = new LatLng(39.963175, 116.400244);
//构建marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);
//构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions().position(point).icon(bitmap);
//在地图上天际Marker并显示
bdMap.addOverlay(option);
}
}
}
将安卓的默认启动图标拷贝到了res/drawable目录下。(涉及到的类见其类参考。)
activity_bd_map_main.xml
……
<TextView
android:id="@+id/tTipForBdMap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<Button
android:id="@+id/bBdMapLevel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="添加标注"/>
......
BdMapMainActivity.java
......
public class BdMapMainActivity extends AppCompatActivity {
......
/* 百度地图基础地图 */
private Button bBdMapLevel = null;
private BdMapBasicLevelApplication bdMapLevelApp = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......
/* ------百度基础地图层------ */
bBdMapLevel = (Button)this.findViewById(R.id.bBdMapLevel);
bBdMapLevel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bdMapLevelApp = (BdMapBasicLevelApplication)getApplication();
bdMapLevelApp.getBdMapControl(bdMapView);
bdMapLevelApp.markTextBdMapLevel();
}
});
}
......
}
通过AS下载程序到Android设备中运行:
图7. 点击“添加标注”按钮之前
图8.点击“添加按钮”之后将安卓默认图标标注到了程序指定的位置(且标注随地图的移动而移动)
2015.12.05
(2) 事件监听
见BaiduMap类,可设置具多监听方法 - 通过BaiduMap对象设置监听方法。以监听地图被点击事件方法为例。
只要确保百度地图点击事件监听方法在地图被点击前被运行过一次,百度地图就能自动捕捉到百度地图被点击事件。
public class BdMapBasicLevelApplication extends Application {
private BaiduMap bdMap = null;
/* 获取地图控制器 */
public boolean getBdMapControl(MapView mapView) {
if (mapView != null) {
bdMap = mapView.getMap();
//设置监听百度地图点击事件的方法
bdMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
bdMap.clear(); //清空地图所有的 Overlay 覆盖物(以及 InfoWindow)
}
@Override
public boolean onMapPoiClick(MapPoi mapPoi) {
return false;
}
});
return true;
}
return false;
}
......
}
在点击“添加标注”按钮时,getBdMapControl()方法被调用,从而注册了BaiduMap被点击事件的监听方法。所以,只要后续地图被点击,系统就会进入onMapClick()运行。在这里,此方法中包含了清空地图所有的 Overlay 覆盖物的方法。
在AS中编译程序,重新下载到Android手机上运行。点击“添加标注”按钮,安卓图标作为地图标注出现在地图上,点击地图,安卓图标标注消失。
2015.12.07
(3) 文字覆盖物
文字,在地图中也是一种覆盖物,开发者可利用相关的接口,快速实现在地图上书写文字的需求。
BdMapBasicLevelApplication.java
/* 百度地图标注(Marker)、文字绘制(Text)图层 */
public void markTextBdMapLevel() {
if (bdMap != null) {
......
//定义文字所显示的坐标点
LatLng llText = new LatLng(39.86923, 116.397428);
//构建文字Option对象,用于在地图上添加文字
OverlayOptions textOption = new TextOptions()
.bgColor(0xAAFFFF00) //文字背景颜色
.fontSize(48) //字体大小
.fontColor(0xFFFF00FF) //字体颜色
.text("西大25教lab1012") //文字
.rotate(30) //字体旋转角度
.position(llText); //放置文字的位置
//在地图上添加Marker、text并显示
bdMap.addOverlay(options);
bdMap.addOverlay(textOption);
}
}
在AS中编译此段程序,下载到Android手机上运行,点击“覆盖物”按钮后显示所有的覆盖物,文字覆盖物截图如下所示:
图9. 文字覆盖物
(4) 涉及到的类
BaiduMap
MarkerOptions
TextOptions
OverlayOptions
BitmapDescriptorFactory
5.3 几何图层覆盖物 - 层8
地图SDK提供多种结合图形覆盖物,利用这些图形,可帮助您构建更加丰富多彩的地图应用。目前提供的几何图形有:点(Dot)、折线(Polyline)、弧线(Arc)、圆(Circle)、多边形(Polygon)。
源文档 http://developer.baidu.com/map/index.php?title=androidsdk/guide/basicmap
(1) 几何图层覆盖物 - 折线
根据百度地图官方开发指南也在地图上绘制覆盖物。在本例中的步骤如下。
BdMapBasicLevelApplication.java
......
import java.util.ArrayList;
import java.util.List;
/**
* Created by lxr on 2015/12/4.
* 通过百度地图SDK接口简单操作百度地图的基础图层
*/
public class BdMapBasicLevelApplication extends Application {
private BaiduMap bdMap = null;
…...
/* 百度地图几何图形覆盖物 */
public void drawBdMapLevel() {
if (bdMap != null) {
//构建折线点坐标
List<LatLng> points = new ArrayList<LatLng>();
points.add(new LatLng(39.965, 116.404));
points.add(new LatLng(39.925, 116.454));
points.add(new LatLng(39.955, 116.494));
points.add(new LatLng(39.905, 116.554));
points.add(new LatLng(39.965, 116.604));
//构建分段亚瑟索引数组
List<Integer> colors = new ArrayList<>();
colors.add(Integer.valueOf(Color.BLACK));
colors.add(Integer.valueOf(Color.RED));
colors.add(Integer.valueOf(Color.YELLOW));
colors.add(Integer.valueOf(Color.BLUE));
//构建绘制对变形对象
OverlayOptions ooPolyLine = new PolylineOptions()
.width(20)
.colorsValues(colors)
.points(points);
//添加到地图的覆盖物层中
bdMap.addOverlay(ooPolyLine);
}
}
}
BdMapMainActivity.java
……
public class BdMapMainActivity extends AppCompatActivity {
......
@Override
protected void onCreate(Bundle savedInstanceState) {
......
/* ------百度基础地图层------ */
bBdMapLevel = (Button)this.findViewById(R.id.bBdMapLevel);
bBdMapLevel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bdMapLevelApp = (BdMapBasicLevelApplication)getApplication();
bdMapLevelApp.getBdMapControl(bdMapView); //将MapView赋予application中的BaiduMap对象
bdMapLevelApp.markTextBdMapLevel(); //标注、文本层覆盖物
bdMapLevelApp.drawBdMapLevel(); //几何图形绘制层覆盖物
}
});
}
......
}
在res/layout/activity_bd_map_main.xml中按钮的文本改为“覆盖物”。在AS中重新编译程序下载到Android手机上运行。
图10. 点击“覆盖物按钮”往地图上添加的“图标”和“绘制的集合图形”覆盖物,点击地图覆盖物消失
(2) 涉及到的类
BaiduMap
PolylineOptions
OverlayOptions
java类:List
5.4 弹出窗覆盖物 - 层12
开发者可利用InfoWindow接口构建具有更强交互性的地图页面。一个InfoWindow接口的简单示例如下:
BdMapBasicLevelApplication.java
......
/**
* Created by lxr on 2015/12/4.
* 通过百度地图SDK接口简单操作百度地图的基础图层
*/
public class BdMapBasicLevelApplication extends Application {
......
/*百度地图弹出窗覆盖物-层12*/
public void showInfoWindowBdMapLevel() {
//创建InfoWindow展示的View
TextView tInfo = new TextView(getApplicationContext());
tInfo.setText("由InfoWindows弹出显示");
tInfo.setTextColor(Color.BLACK);
//定义用于显示该InfoWindow的坐标点
LatLng positon = new LatLng(39.86923, 116.397428);
//创建InfoWindow,传入展示的View,地理坐标,y轴偏移量
InfoWindow mInfoWindow = new InfoWindow(tInfo, positon, -47);
//显示InfoWindos
bdMap.showInfoWindow(mInfoWindow);
}
}
BdMapMainActivity.java
……
public class BdMapMainActivity extends AppCompatActivity {
……
@Override
protected void onCreate(Bundle savedInstanceState) {
……
/* ------百度基础地图层------ */
bBdMapLevel = (Button)this.findViewById(R.id.bBdMapLevel);
bBdMapLevel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
……
bdMapLevelApp.showInfoWindowBdMapLevel(); //弹出覆盖物
}
});
}
……
}
在AS中重新编译程序,然后将程序下载到Android手机上运行,弹出窗覆盖物截图如下:
图11. 点击“覆盖物”按钮,显示弹出窗覆盖物,所有覆盖物将会消失
5.5 地形图图层-层3
地形图图层(GroundOverlay),又可叫做图片图层,即开发者可在地图的指定位置上添加图片。该图片可随地图的平移、缩放、旋转等操作做相应的变换。该图层是一种特殊的Overlay, 它位于底图和底图标注层之间(即该图层不会遮挡地图标注信息)。
源文档 http://developer.baidu.com/map/index.php?title=androidsdk/guide/basicmap#.E5.9C.B0.E5.BD.A2.E5.9B.BE.E5.9B.BE.E5.B1.82
在百度地图中使用地形图覆盖物的方式如下 - 使用GroundOverlayOptions接口:
BdMapBasicLevelApplication.java
......
/**
* Created by lxr on 2015/12/4.
* 通过百度地图SDK接口简单操作百度地图的基础图层
*/
public class BdMapBasicLevelApplication extends Application {
......
/* 百度地图地形图图层 - 层3 */
public void showGroundBdMapLevel() {
//定义Ground的显示地理范围
LatLng southwest = new LatLng(39.92235, 116.380338);
LatLng northeast = new LatLng(39.997246, 116.514977);
LatLngBounds bounds = new LatLngBounds
.Builder()
.include(northeast)
.include(southwest)
.build();
//定义Ground显示的图片
BitmapDescriptor bdGround = BitmapDescriptorFactory
.fromResource(R.drawable.wk);
//定义Ground覆盖物选项
OverlayOptions ooGround = new GroundOverlayOptions()
.positionFromBounds(bounds)
.image(bdGround)
.transparency(0.8f);
//在百度地图中添加Ground覆盖物
bdMap.addOverlay(ooGround);
}
}
在res/drawable下添加wk.png图片。
……
public class BdMapMainActivity extends AppCompatActivity {
......
@Override
protected void onCreate(Bundle savedInstanceState) {
......
/* ------百度基础地图层------ */
bBdMapLevel = (Button)this.findViewById(R.id.bBdMapLevel);
bBdMapLevel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bdMapLevelApp = (BdMapBasicLevelApplication)getApplication();
bdMapLevelApp.getBdMapControl(bdMapView); //将MapView赋予application中的BaiduMap对象
…...
bdMapLevelApp.showGroundBdMapLevel(); //地形图图覆盖物
}
});
}
......
}
在AS中重新编译程序,将程序下载到Android手机上运行,地形图图层覆盖物的截图如下:
图12. 点击“覆盖物”按钮,显示百度地形地图覆盖物,所有覆盖物将会消失
5.6 百度地图热力图功能(HeatMap)
热力图是用不同颜色的区块叠加在地图上描述人群分布、密度和变化趋势的一个产品,百度地图SDK将绘制热力图的能力为广大开发者开放,帮助开发者利用自有数据,构建属于自己的热力图,提供丰富的展示效果。
源文档 http://developer.baidu.com/map/index.php?title=androidsdk/guide/basicmap#.E7.83.AD.E5.8A.9B.E5.9B.BE.E5.8A.9F.E8.83.BD
利用热力图功能构建自有数据热力图的方式如下。
BdMapBasicLevelApplication.java
…...
/**
* Created by lxr on 2015/12/4.
* 通过百度地图SDK接口简单操作百度地图的基础图层
*/
public class BdMapBasicLevelApplication extends Application {
…...
/* 百度地图热力图功能 -层4*/
public void showHeatBdMapLevel() {
//设置渐变颜色值
int[] DEFAULT_GRADIENT_COLORS = {Color.rgb(102, 225, 0), Color.rgb(255, 0, 0)};
//设置渐变颜色起始值
float[] DEFAULT_GRADIENT_START_POINTS = {0.2f, 1f};
//构造颜色渐变对象
Gradient gradient = new Gradient(DEFAULT_GRADIENT_COLORS, DEFAULT_GRADIENT_START_POINTS);
//随机生成地理位置点
List<LatLng> randomList = new ArrayList<LatLng>();
Random r = new Random();
for (int i = 0; i < 500; i++) {
//116.220000, 39.780000 - 116.570000, 40.150000
int rlat = r.nextInt(370000);
int rlng = r.nextInt(370000);
int lat = 39780000 + rlat;
int lng = 116220000 + rlng;
LatLng ll = new LatLng(lat / 1E6, lng / 1E6);
randomList.add(ll);
}
//添加、显示热力图
/*在大量热力图数据情况下,build过程相对较慢,建议放在新建线程中 */
HeatMap heatMap = new HeatMap.Builder()
.data(randomList)
.gradient(gradient)
.build();
//添加热力图
bdMap.addHeatMap(heatMap);
//删除热力图
//heatMap.removeHeatMap();
}
}
BdMapMainActivity.java
......
public class BdMapMainActivity extends AppCompatActivity {
......
@Override
protected void onCreate(Bundle savedInstanceState) {
......
/* ------百度基础地图层------ */
bBdMapLevel = (Button)this.findViewById(R.id.bBdMapLevel);
bBdMapLevel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bdMapLevelApp = (BdMapBasicLevelApplication)getApplication();
bdMapLevelApp.getBdMapControl(bdMapView); //将MapView赋予application中的BaiduMap对象
……
bdMapLevelApp.showHeatBdMapLevel(); //热力图
}
});
}
......
}
将activity_bd_map_main.xml中“覆盖物”按钮的文字内容改为“bd基础地图层”。
在AS中重新编译程序,将程序下载到Android手机上运行。热力图运行结果截图如下。
图13. 点击“bd基础地图层”按钮显示的热力图[删除热力图应该用HeatMap.removeHeatMap()方法]
编写百度地图基础地图的程序步骤:百度地图开发指南探到相应部分的步骤(类) –> 根据设计的程序结构和逻辑编写程序。
“百度地图基础地图”的AS版练习代码地址:LearnBdMapBasic5。
2015.12.08
6 定位当前位置
百度地图Android定位SDK v6.1.3(全球定位支持)
百度地图Android定位SDK是为Android移动端应用提供的一套简单易用的LBS定位服务接口,专注于为广大开发者提供最好的综合定位服务,通过使用百度定位SDK,开发者可以轻松为应用程序实现智能、精准、高效的定位功能。
百度地图Android定位SDK提供GPS,基站,Wi-Fi等多种定位方式,适用于室、内外多种定位场景,具有出色的定位性能:定位精度高、覆盖率广、网络定位请求流量小、定位速度快。
源文档 http://developer.baidu.com/map/index.php?title=android-locsdk
以开发指南“使用百度定位SDK获取形影位置信息,然后利用地图SDK中的忌口,在地图上展示实时位置信息”为起点看定位的使用。
6.1 百度地图Android (基础地图 + 定位)SDK配置
到百度地图Android SDK页面下载包含“基础地图”和“定位功能”的开发包。按照配“[配置百度地图移动版开发环境(Android Studio)] - 3 百度地图Android SDK在AS中的配置”置百度地图开发环境。
6.2 利用百度地图Android SDK定位当前位置
(1) 使用定位相关的类
新建BdMapLocationActivity.java文件。
BdMapLocationActivity.java
package xndx.learnbdmapbasic;
import android.app.Activity;
import android.os.Bundle;
import android.os.PersistableBundle;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
/**
* Created by lxr on 2015/12/8.
* 使用百度地图Android SDK定位当前位置
*/
public class BdMapLocationActivity extends Activity {
/* 视图相关 */
private MapView mapView = null;
private BaiduMap bdMap = null;
boolean isFirstLoc = true; //是否首次定位
/* 定位相关类 */
private LocationClient locClient = null;
private BdMapLocationListenner bdLocListener = new BdMapLocationListenner();
private MyLocationConfiguration.LocationMode locMode =
MyLocationConfiguration.LocationMode.NORMAL;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bd_map_loc);
//获取百度地图控制器
mapView = (MapView)this.findViewById(R.id.bdMapView);
bdMap = mapView.getMap();
//开启定位图层
bdMap.setMyLocationEnabled(true);
//定位初始化
locClient = new LocationClient(getApplicationContext());
locClient.registerLocationListener(bdLocListener);
setLocationOption();
//开始定位
locClient.start();
}
/* 定位SDK监听函数 */
public class BdMapLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
if (mapView == null || bdLocation == null)
return;
MyLocationData locData = new MyLocationData.Builder()
.accuracy(bdLocation.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(bdLocation.getLatitude())
.longitude(bdLocation.getLongitude()).build();
bdMap.setMyLocationData(locData);
//设置定位数据(定位模式,是否允许方向信息,用户自定义图标)
BitmapDescriptor locMarker = BitmapDescriptorFactory
.fromResource(R.drawable.loc_icon);
MyLocationConfiguration locConfig = new MyLocationConfiguration(locMode, true, locMarker);
bdMap.setMyLocationConfigeration(locConfig);
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(bdLocation.getLatitude(),
bdLocation.getLongitude());
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
bdMap.animateMapStatus(u);
}
}
}
/* 设置定位参数 */
private void setLocationOption() {
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
option.setCoorType("bd0911"); //返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(1000); //设置发起定位请求的间隔时间为1000ms
locClient.setLocOption(option);
}
/* 管理活动(百度地图)生命周期 */
@Override
protected void onPause() {
mapView.onPause();
super.onPause();
}
@Override
protected void onResume() {
mapView.onResume();
super.onResume();
}
@Override
protected void onDestroy() {
//活动退出时停止定位,关闭定位图层
locClient.stop();
bdMap.setMyLocationEnabled(false);
mapView.onDestroy();
mapView = null;
super.onDestroy();
}
}
在/res/drawable目录下添加一张loc_icon.png突变,作为定位图标。
在百度地图上获取当前位置有3个关键的地方:
- MyLocationData - 获取到当地的(地图坐标)信息
- LocationClientOption - 设置定位请求的间隔时间,每个1000ms发出一个定位请求
- BDLocationListener - 系统(百度地图Android SDK)每发出定位请求时,其内的onReceiveLocation()方法被自动调用
activity_bd_map_loc.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<com.baidu.mapapi.map.MapView
android:id="@+id/bdMapView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.baidu.mapapi.map.MapView>
</LinearLayout>
BdMapMainActivity.java
......
public class BdMapMainActivity extends AppCompatActivity {
……
/* 百度地图定位 */
private Button bBdMapLocation = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
......
/* 百度地图定位 */
bBdMapLocation = (Button)this.findViewById(R.id.bBdMapLocation);
bBdMapLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(BdMapMainActivity.this, BdMapLocationActivity.class);
startActivity(intent);
}
});
}
......
}
当点击主活动中的“定位按钮”时,通过意图Intent来启动BdMapLocationActivity活动。
activity_bd_map_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
…...
<TextView
android:id="@+id/tTipForBdMap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/bBdMapLevel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="bd基础地图层"/>
<Button
android:id="@+id/bBdMapLocation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/bBdMapLevel"
android:text="定位"/>
</RelativeLayout>
<!-- 显示百度地图视图控件 -->
<com.baidu.mapapi.map.MapView
android:id="@+id/bdMapView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.baidu.mapapi.map.MapView>
</LinearLayout>
(2) 注册
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest ……>
<application
android:name=".BdMapBasicLevelApplication"
……>
<!-- 百度基础地图开发密钥 -->
……
<!-- 百度地图定位 -->
<activity android:name=".BdMapLocationActivity">
</activity>
<!-- 定位服务 -->
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote">
</service>
</application>
……
</manifest>
主要是在AndroidManifest.xml清单文件中注册定位活动BdMapLocationActivity与定位服务com.baidu.location.f。
在AS中编译程序。将程序下载到Android手机上并运行。定位截图如下:
图14. 在启动活动中点击“定位”按钮启动定位活动定位到当前位置 - 北碚
双击定位图标所在位置,见更详细的位置:
图15. 双击百度地图观察更详细的位置(还不太精准)
百度地图定位当前位置的AS练习代码保存地址:LearnBdMapBasic6。
2015.12.09
7. 周边雷达
7.1 简介·摘
周边雷达功能,是面向移动端开发者的一套SDK功能接口。同步支持Android和iOS端。它的本质是一个连接百度LBS开放平台前端SDK产品和后端LBS云的中间服务。开发者利用周边雷达功能,可以便捷的在自己的应用内,帮助用户实现查找周边跟“我”使同样一款App的人,这样一个功能。周边雷达功能的典型使用场景:
[1] 查看周边都有谁跟“我”使用同一个App,分布在哪里?
[2] 查看周边用户在听什么歌、看什么文章、有什么新动态?
[3] 查看周边有什么最新发生的新闻、资讯?
源文档 http://developer.baidu.com/map/index.php?title=androidsdk/guide/radar
7.2 使用“周边雷达功能”的流程
(1) 注册“周边雷达功能”
到“周边雷达管理页面”用应用AK注册周边雷达功能。
(2) 下载含“周边雷达功能”的百度地图Android SDK
到“百度地图Android SKD下载页面”下载包含“基础地图”、“定位功能”以及“周边雷达”模块的开发包、示例代码以及类参考。
将下载的.jar包和.so文件导入到AS的LearnBdMapBasic工程中。
12.14
(3) 调用百度地图“周边雷达功能”API
[1] 读“周边雷达功能”类参考
类名 | 描述 |
RadarSearchManager | 周边雷达管理类 |
RadarNearbyResult | 查询周边结果结构 |
RadarNearbyInfo | 周边人信息结构 |
RadarNearbySearchOption | 查找周边人参数对象 |
RadarNearbySearchSortType | 排序策略 |
RadarSearchError | 周边雷达结果状态定义 |
RadarSearchListener | 查询周边监听 |
RadarUploadInfo | 上传的个人信息 |
RadarUploadInfoCallback | 上传信息回调 |
[2] 百度地图“周边雷达功能”API(使用)流程
以“位置信息”单词上传为例:
通过RadarSearchManager对象初始化周边雷达 –> 注册周边雷达监听实例(RadarSearchListener) –>调用主动上传信息的函数(uploadInfoRequest(RadarUploadInfo info))触发回调函数(RadarSearchListener.onGetUploadState(RadarSearchError error))被调用。
在AS中新建BdMapRadarActivity.java文件,实现以上流程(失败 - 没有调用RadarSearchListener.onGetUploadState(RadarSearchError error)函数):
package xndx.learnbdmapbasic;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.radar.RadarNearbyResult;
import com.baidu.mapapi.radar.RadarSearchError;
import com.baidu.mapapi.radar.RadarSearchListener;
import com.baidu.mapapi.radar.RadarSearchManager;
import com.baidu.mapapi.radar.RadarUploadInfo;
import com.baidu.mapapi.radar.RadarUploadInfoCallback;
/**
* Created by lxr on 2015/12/14.
* 百度地图周边雷达功能 - 尝试揣摩API的用途(监听 - 运行机理等)
*/
public class BdMapRadarActivity extends Activity implements RadarSearchListener {
private RadarSearchManager radarSearchManager = null;
private TextView tRadarMsg = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bd_map_radar);
tRadarMsg = (TextView)this.findViewById(R.id.tRadarMsg);
//初始化周边雷达功能 - 获取“周边雷达”实例
radarSearchManager = RadarSearchManager.getInstance();
//周边雷达设置用户,id为空默认是设备标识
radarSearchManager.setUserID("");
//添加查询周边信息的监听
radarSearchManager.addNearbyInfoListener(this);
//准备上传数据
RadarUploadInfo info = new RadarUploadInfo();
info.comments = "APIs机制";
LatLng pt = new LatLng(39.1, 100.1);
info.pt = pt;
//请求上传info数据
radarSearchManager.uploadInfoRequest(info);
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onDestroy() {
tRadarMsg.setText(null);
radarSearchManager.removeNearbyInfoListener(this);
super.onDestroy();
}
/* 在实现RadarSearchListener类时,以下三个方法需要被重写 */
//上传状态监听 - 当有周边雷达上传数据操作后,此函数会被自动调用
@Override
public void onGetUploadState(RadarSearchError radarSearchError) {
if (radarSearchError == RadarSearchError.RADAR_NO_ERROR) {
tRadarMsg.setText("上传成功");
} else {
tRadarMsg.setText("上传失败");
}
}
//查询周边的人监听 - 当有周边雷达查询周边的人的操作后,此函数被自动调用
@Override
public void onGetNearbyInfoList(RadarNearbyResult radarNearbyResult, RadarSearchError radarSearchError) {
}
//清除位置信息监听 - 当周边雷达有清除位置信息操作后,此函数被自动调用
@Override
public void onGetClearInfoState(RadarSearchError radarSearchError) {
}
}
将此活动注册在应用程序的清单文件中。
在BdMapMainActivity中添加按钮来触发BdMapRadarActivity活动的运行,结果 RadarSearchListener.onGetUploadState()函数未被触发调用。不调了,百度地图基础就到这里 - 从百度地图基础改变到APIs中的回调方法(触发)。
[2015.12.09 - 19:22]