Windows Mobile

API具体说明
- 定位API只提供包装好的定位依据给第三方应用程序,第三方应用程序使用定位依据向定位服务器请求当前的位置。
- 第三方应用可以通过异步回调或同步获取的方式使用定位API。
- 定位API可设置一个异步回调的最小时间间隔及一个最大时间间隔(以秒计)。
当位置发生变化时, 如果时间间隔太小, 则忽略变化;如果太长时间位置未变化也应发生一次回调。
如果第三方应用未设置最小时间间隔或最大时间间隔,客户端API默认的时间间隔为最小时间间隔为3分钟(180s),最大时间间隔为10分钟(600s)
- 定位API可以设置敏感度, 以便第三方应用判断变化以及防抖。目前敏感度定义如下:
超高: 一般不建议使用超高;
高: 希望位置敏感一点;
中:一般应该选择中;
低: 对位置不敏感的用低。
- 变化通知:根据应用设定的敏感度及时间间隔, 定位API开始采集定位依据,发生匹配敏感度设置及时间间隔的数据变化后即通知应用。
- GPS有默认的刷新频率,定位API自行检查GPS设备,如果开启则需要进行数据采集,在第三方应用程序请求定位依据时一并送上。
API
定位API组成
定位API针对不同的WM平台使用不同的版本,每个版本都由三个部分组成,分别为定位动态链接库(location.dll)、定位LIB(location.lib)及头文件LocationAPI.h。使用定位API时,可参考具体的使用示例。
接口设计
第三方接口
01 typedef void (*LOCATIONCALLBACK)(
02 int nErrCode, // @parm 返回码,标识调用状态(不成功返回错误码)
03 unsigned char* buffer, // @parm 正确时缓冲数据,错误时为错误提示
04 int nLen, // @parm buffer缓冲数据的长度
05 void *pUserData // @parm 用户传入参数
06 );
2. 添加删除回调函数
void AddLocationCallback( LOCATIONCALLBACK pCallback, void *pUserData );
void RemoveLocationCallback( LOCATIONCALLBACK pCallback );
3. 设置获取变化的灵敏度
void SetSensitivity( ESensitivity eSensitivity );
ESensitivity GetSensitivity();
4. 设置获取回调方式下的最短最长时间间隔
void SetNotifyInterval( int nMinSecond, int nMaxSecond );
void GetNotifyInterval( int& nMinSecond, int& nMaxSecond );
5. 设置获取gps端口号,默认为com1
void SetGpsPort(int nGpsPort);
int GetGpsPort();
6. 设置获取gps波特率,默认为4800
void SetGpsBaud(int nBaud);
int GetGpsBaud();
7. 得到定位依据
int GetLocationData(unsigned char buffer[], int nBufferLen, int& nWrite);
8. 启动停止定位
int Start();
void Stop();
用户使用定位API时,应该在主程序启动时即启动定位插件,以采集连续的定位数据,获得较为理想的定位效果,并在主程序终止前才结束定位插件。
回调错误码描述
ERROR_LOCATION_OK //定位成功,正确的数据
数据结构设计
1. 变化敏感度
01 eSensitivitySuper //超高
02 eSensitivityHigh //高
03 eSensitivityNormal //一般
04 eSensitivityLow //低
2. 回调函数结构
01 typedef void (*LOCATIONCALLBACK)(
02 int nErrCode, // @parm 返回码,标识调用状态(不成功返回错误码)
03 unsigned char * buffer, // @parm 正确时缓冲数据,错误时为错误提示
04 int nLen, // @parm buffer缓冲数据的长度
05 void *pUserData // @parm 用户传入参数
06 );
定位API使用范例
C++使用范例
使用步骤如下:
1. 定义回调函数
01 void TestCallBack(int nErrCode, unsigned char* buffer, int nLen, void* pUserData);
2. 定义CLocationAPI类型成员变量
01 //CUseLocation.h
02 class CUseLocation
03 {
04 ……
05 CLocationAPI m_locationAPI;
06 }
3. 设置属性,CLocationAPI有自己的属性默认值,如果第三方不进行设置,则直接使用默认属性值。
01 m_locationAPI.SetSensitivity( eSensitivityHigh ); //设置灵敏度为高
02 m_locationAPI.SetNotifyInterval( 300, 600 ); //设置最大最小更新时间
03 m_locationAPI.SetGpsPort(1); //设置GPS端口号
04 m_locationAPI.SetGpsBaud(4800); //设置GPS波特率
4. 添加回调函数及其参数
01 m_locationAPI.AddLocationCallback( TestCallBack, this ); //设置回调函数
5. 启动采集定位数据,应该在主程序启动后即启动。
01 m_locationAPI.Start();
6. 回调函数中处理数据
01 void TestCallBack(int nErrCode, unsigned char* buffer, int nLen, void* pUserData);
02 {
03 CUseLocation* pUseLocation = (CUseLocation*)pUserData;
04
05 switch(nErrCode)
06 {
07 case ERROR_LOCATION_OK:
08 //位置变化,buffer中存的是定位依据
09 break;
10 default:
11 break;
12 }
13 }
或者只要m_locationAPI启动了Start()方法,第三方可以在任何地方调用GetLocationData()获取定位依据。
7. 定位结束,应该在主程序终止前才停止定位插件。
m_locationAPI.Stop();
C#使用范例
1.声明接口
01 public enum ESensitivity
02 {
03 eSensitivitySuper,
04 eSensitivityHigh,
05 eSensitivityNormal,
06 eSensitivityLow
07 }
08 public delegate void LocationCallBack(int nErrCode, out string buffer, int nLen, IntPtr pUserData);
09
10 [DllImport("Location.dll")]
11 public static extern int LBS_Start();
12 [DllImport("Location.dll")]
13 public static extern void LBS_Stop();
14 [DllImport("Location.dll")]
15 public static extern void LBS_AddLocationCallback(LocationCallBack pCallback, IntPtr pUserData);
16 [DllImport("Location.dll")]
17 public static extern void LBS_RemoveLocationCallback(LocationCallBack pCallback);
18 [DllImport("Location.dll")]
19 public static extern void LBS_SetSensitivity(ESensitivity eSensitivity);
20 [DllImport("Location.dll")]
21 public static extern ESensitivity LBS_GetSensitivity();
22 [DllImport("Location.dll")]
23 public static extern void LBS_SetNotifyInterval(int nMinSecond, int nMaxSecond);
24 [DllImport("Location.dll")]
25 public static extern void LBS_GetNotifyInterval(out int nMinSecond, out int nMaxSecond);
26 [DllImport("Location.dll")]
27 public static extern void LBS_SetGpsPort(int nGpsPort);
28 [DllImport("Location.dll")]
29 public static extern int LBS_GetGpsPort();
30 [DllImport("Location.dll")]
31 public static extern void LBS_SetGpsBaud(int nBaud);
32 [DllImport("Location.dll")]
33 public static extern int LBS_GetGpsBaud();
34 [DllImport("Location.dll")]
35 public static extern int LBS_GetLocationData( ref byte buffer, int nBufferLen, out int nWrite);
2.使用步骤如下:(具体说明详见4.1)
1) 设置属性
LBS_SetSensitivity (eSensitivityNormal);
LBS_SetNotifyInterval ( 180, 600);
2) 启动采集定位数据
LBS_Start();
3) 获取数据,定期调用该函数
LBS_GetLocationData( ref str[0], 10240, out nWrite);
4) 定位结束
LBS_Stop();