20110510 Brew工程师培训笔记——第十六章 ITAPI 简介

第十六章 ITAPI 简介

一、主要内容

(1)、获取状态信息以及进入或正在呼叫的主叫号码

(2)、安排语音呼叫

(3)、短消息的提取和发送

(4)BREW短消息

二、获取手机的状态信息

(1)、呼叫状态

(a)、呼叫状态的信息可以通过ITAPI_GetStatus()获得,所得到的信息存储在数据结构TAPIStatus中

typedef structure

{

char szMobileID[MOBILE_ID_LEN +1];

PhoneState state;

flg bData:1;

flg bDigital:1;

flg bRoaming:1;

flg bCallEnded:1;

flg bE911CallbackMode:1;

flg bRestricted:1;

flg bRegistered:1;

flg bDormancy:1;

} TAPIStatus;

(2)、设备的状态

(a)、PhoneState 用于 ITAPI_GetStatus(),以获取设备的当前状态。 它是 TAPIStatus 数据结构中的一个成员,该结构将由 ITAPI_GetStatus() 函数填充。

typedef enum

{

PS_OFFLINE,

PS_IDLE,

PS_INCOMING,

PS_ORIG,

PS_CONVERSATION

} PhoneState;

(3)、呼叫相关的用户信息

(a)、获取进入或外发语音呼叫的用户号码

1、通过ITAPI_GetCallerID()得到

(4)、获得设备的 IMSI/MIN

(a)、ITAPI_GetStatus() 返回的 TAPIStatus 结构中的 szMobileID - 所有 BREW SDK 版本。

(b)、设备项目 AEE_DEVICEITEM_MOBILE_ID 的 ISHELL_GetDeviceInfoEx() - BREW SDK 2.1 以上 

(5)、呼叫状态发生变化时的通知

(a)、ITAPI_OnCallStatus()方法用于注册回调函数,当呼叫状态发生变化时, BREW 将调用该回调函数。

(b)、它支持用于指定应用程序所关注呼叫状态类型的标记

int ITAPI_OnCallStatus

(

ITAPI * pITAPI,

PFNNOTIFY pfn,

void * pUser,

uint32 dwDelay,

uint16 wFlags

)

三、语音呼叫

(1)、语音呼叫的特点

(a)、ITAPI_MakeVoiceCall()方法用于安排语音呼叫 

(b)、拨叫的号码通过数字字符串指定。 如果输入的是空串或NULL,则不安排呼叫 

(c)、只允许使用以下数字:0-9、#、*。其它数字均将忽略

(d)、如果正在进行语音呼叫,则返回 EALREADY 

(e)、如果正在进行数据呼叫但是没有网络活动 (TCP),则结束数据呼叫而安排语音呼叫。 

(f)、该函数可以实现运营商确立的保密策略, 其中包括以对话框方式提供给用户的中间提示

(2)、语音呼叫的事件流程

(a)、向用户显示对话框。

(b)、清除对话框时,将事件 EVT_DIALOG_END 发送至应用程序。

(c)、此时,应用程序必须刷新屏幕。

(d)、如果用户同意安排呼叫,则将事件 EVT_APP_SUSPEND 发送至应用程序。

(e)、呼叫完成时,将事件 EVT_APP_RESUME 发送至应用程序。

(f)、应用程序必须刷新屏幕。

四、收发普通短消息

(1)、普通短消息的接收

(a)、使用 MIF Editor (或使用 ISHELL_RegisterNotify())注册 AEECLSID_TAPI 类的NMASK_TAPI_SMS_TEXT 通知。

(b)、当入局 SMS 文本消息进入系统时,向应用程序发送 EVT_NOTIFY 事件,其中, dwParam 指向的 AEENotify 结构的 pData 将指向 AEESMSMsg 结构。

(c)、将此结构传至 ITAPI_ExtractSMSText(),以提取消息的格式化文本部分。

AEESMSTextMsg * ITAPI_ExtractSMSText

(

ITAPI * pITAPI,

const AEESMSMsg * pMsg

)

(2)、普通短消息的发送

(a)、用BREW的ITAPI_SendSMS()函数来发送中/英文短消息。ITAPI_SendSMS()函数的原形如下

int ITAPI_SendSMS

(

ITAPI *pITapi,

const char * pszDst,

const char * pszMsg,

AEECLSID clsDst,

PFNSMSSTATUS pfn,

void *pUser

)

(3)、普通短消息的发送示例

(a)、英文短消息

ITAPI_SendSMS(pITapi, 

"8581112222", 

"Hello World", 

0,

  MyMOSMSNotify, 

pMe);

(b)、中文短消息:

AECHAR w_string[]= { 0x4F60, 0x597D,0x4e2D,0x56FD, ‘/0’}; //你好中国

ITAPI_SendSMS(pITapi,

 "8581112222", 

(const char*)w_string,

 0,

 MyMOSMSNotify, 

pMe);

(c)、短消息发送成功与否的判断

1、ITAPI_SendSms()实际上是一个异步调用

2、消息发送是否成功则需要底层通过回调函数来通知

3、BREW API定义了回调函数的类型为PFNSMSSTATUS

typedef void (*PFNSMSSTATUS)(void * pUser, int16 status);

4、如果用户的回调函数名为MySmsNotify, 则其函数原形为

void MySmsNotify(CSmsApp * pApp, int16 status)

5、建议在回调函里只把发送状态值status保存下来 

五、BREW 短消息

(1)、Brew 短消息的格式

(a)、BREW把一种特定格式的短消息称为BREW特定应用消息(BREW directed message),即这种特殊的短消息是发送给某一个特定的BREW应用程序的 。

(b)、BREW短信的格式如下:

 //BREW:<Class ID>:<Text Payload>

其中:

//BREW——消息头,表示本短信为BREW短信;

Class ID——表示接收短信的应用程序的Class ID 号;

Text Payload——附加的消息文本,ASCII格式;

例如:

//BREW:01009FF0:test

//BREW:0x01009FF0:Hello world

(2)、BREW短信的发送简例

(a)、和发送普通短信一样,调用ITAPI_SendSMS()函数发送 

ITAPI_SendSMS(pMe->m_pITAPI,

”13331016561”,

”//BREW:0x01009FF0:Hello world”, 

0, 

(PFNSMSSTATUS)MySmsNotify,

  pMe);

(b)、BREW短信的接收过程

1、BREW手机的底层软件首先截获短消息,判断消息头是否为 //BREW;

2、如果判断是BREW短信,则启动BREW应用管理器

3、BREW应用管理器根据收到的Class ID加载对应的BREW应用程序,并完成该应用程序的初始化工作;

4、BREW应用管理器发送EVT_APP_MESSAGE事件给应用程序;

5、应用程序的HandleEvent()函数处理EVT_APP_MESSAGE事件,如果需要启动应用,则调用ISHELL_StartApplet()函数来启动;或者也可以“悄悄地”进行处理而不用启动应用程序。

(c)、BREW短信的接收简例

case EVT_APP_MESSAGE:
//得到BREW短信的文本信息 

char* textPayload = (char *)dwParam; 

// 启动应用

ISHELL_StartApplet(pMe->a.m_pIShell, 
AEECLSID_HELLOWORLD);
return TRUE;

(d)、BREW短信中发送中文

1、定义变量wStrMessage, 类型为(AECHAR*),指向一段UNICODE字符串的缓冲区;

2、定义变量BrewHeader存储BREW短信的消息头字符串,这里假设为 //BREW:0x01009FF0:。将这段ASCII字符串拷贝到wStrMessage缓冲区的开始段。可以用STRNCPY函数来完成拷贝,例子如下:

STRNCPY( (char *)(wStrMessage), BrewHeader, STRLEN(BrewHeader) );

3、在wStringMessage缓冲区中,紧接着BREW短消息头的后面,将中文字符串ChineseTextMsg拷贝过来;例如:

WSTRCPY(&(wstrMessage[STRLEN(BrewHeader)/2]), ChineseTextMsg);

4、调用ITAPI_SendSMS()函数发送,注意UNICODE字符串wStrMessage要强制转换成(const char*),这是ITAPI_SendSMS()函数要求的 

(e)、BREW短信中接收中文

1、EVT_APP_MESSAGE事件的dwParam变成了指向UNICODE字符串的指针,只要把该段的数据拷贝过来即可。例子如下:

case EVT_APP_MESSAGE:

{
WSTRCPY( (AECHAR*)wTextPayload, (AECHAR*)dwParam);

      return TRUE;

 }

(f)、用BREW短信开发应用程序的几种解决方案 

1、在短信中直接传送消息。如果在用户的数据量不大的情况下,是最简单实用的方法。缺点是当数据量变大时,不适用 

2、在短信中传送应用程序的启动参数。和命令行参数类似,通过发送不同的参数来执行程序的不同分枝。可以用ISHELL_StartAppletArgs()函数来实现。

3、在短信中传送一个网站的URL地址,应用程序收到短信后可以自动连接网站

(g)、注意事项 

1、也可以发送普通短信的方式来发送BREW短信,只要数据格式正确,在任何一台能发短信的手机上都可以发送。

2、如果BREW短信的消息头格式错误,则该短信会被手机的短消息信箱接收到。

3、如果BREW短信的消息头格式正确,但是Class ID错误或者接收方手机中无此应用程序,该短消息会丢弃不用,而不会传到手机的普通短消息信箱中,也不产生任何形式的提示信息。 

4、接收方的应用程序无需在MIF文件中作notification, ITAPI等选项设置 

(h)、示例程序

在模拟器器中测试Brew短消息激活应用的方法如下:

1、启动BREW模拟器

2、选择小程序的路径到Myitapi示例程序

3、选择Brew模拟器中的“Tools-Tapi Emulation”

4、在弹出对话框中单击“Send SMS”

5、输入Myitapi的ClassID, 再输入字符串“Hello Brew”,单击“Send”

6、BREW模拟器 将出现“Hello Brew”页面

六、本章关键点

(1)、获得状态信息

(2)、语音呼叫

(3)、普通短消息

(4)Brew 短消息

七、问题回顾

(1)、可以获得那些状态信息?

(2)、语音呼叫的流程是什么?

(3)、短消息的收发方法是什么?

(4)、如何使用BREW短消息激活一个应用?

(5)、如何发送带中文的BREW短消息?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值