7016|21

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教下用RIL来处理来电问题,想阻止系统接受RIL_NOTIFY_RING和RIL_NOTIFY_CALLERID有办法么,然后自己处理这几个消息 [复制链接]

请教下用RIL来处理来电问题,想阻止系统接受RIL_NOTIFY_RING和RIL_NOTIFY_CALLERID有办法么,然后自己处理这几个消息,并显示自己的来电界面.

我写了代码,但是执行不到回调函数里面,是什么原因呢,如果用RIL能实现上面的功能么?
代码如下:

typedef void (*PFVOID)();
typedef HRESULT (*PFRIL_Initialize)(DWORD dwIndex, PFVOID pfnResult, PFVOID pfnNotify, DWORD dwNotificationClasses, DWORD dwParam, HANDLE *hRil);
typedef HRESULT (*PFRIL_Deinitialize)(HANDLE hRil);
typedef HRESULT (*PFRIL_GetRegistrationStatus)(HANDLE hRil);
typedef HRESULT (*PFRIL_GetCellTowerInfo)(HANDLE hRil);
typedef HRESULT (*PFRIL_DevSpecific)(HANDLE hRil, BYTE*buf, int size);

PFRIL_Deinitialize RIL_Deinitialize;
PFRIL_Initialize RIL_Initialize;
PFRIL_GetRegistrationStatus RIL_GetRegistrationStatus;
PFRIL_GetCellTowerInfo RIL_GetCellTowerInfo;
PFRIL_DevSpecific RIL_DevSpecific;

fnInitRil()
{
m_hRilDll = LoadLibrary(L"ril.dll");
if (m_hRilDll)
{
RIL_Initialize= (PFRIL_Initialize)GetProcAddress(m_hRilDll,L"RIL_Initialize");

RIL_Deinitialize= (PFRIL_Deinitialize)GetProcAddress(m_hRilDll,  L"RIL_Deinitialize");

RIL_GetRegistrationStatus= (PFRIL_GetRegistrationStatus)GetProcAddress(m_hRilDll, L"RIL_GetRegistrationStatus");

RIL_GetCellTowerInfo= (PFRIL_GetCellTowerInfo)GetProcAddress(m_hRilDll, L"RIL_GetCellTowerInfo");

RIL_DevSpecific= (PFRIL_DevSpecific)GetProcAddress(m_hRilDll, L"RIL_DevSpecific");

HRESULT hResult = 0;
hResult = RIL_Initialize(1, NULL, PFVOID(NotifyProc), -1, (DWORD)this, NULL);
GetLastError();                //retVal = TRUE;
}
}


LRESULT CALLBACK NotifyProc(DWORD dwCode, const void *lpData, DWORD cbData, DWORD dwParam)
{
           switch(dwCode)
        {
        case RIL_NOTIFY_CONNECT:
                break;
        case RIL_NOTIFY_DISCONNECT:
        break;
        case RIL_NOTIFY_CALLERID:
                break;
        case RIL_NOTIFY_RING :
                break;
        case RIL_NOTIFY_CALLPROGRESSINFO:
                break;

        default:
                break;
        }
       
        return 1;

}

执行不到NotifyProc回调函数里面,请问下
typedef HRESULT (*PFRIL_Initialize)(DWORD dwIndex, PFVOID pfnResult, PFVOID pfnNotify, DWORD dwNotificationClasses, DWORD dwParam, HANDLE *hRil);

我是用下面的这个弄的
RIL_Initialize(1, NULL, PFVOID(NotifyProc), -1, (DWORD)this, NULL)
里面的参数如何定义呢?还是其他的问题呢??



最新回复

也在做相关的内容,顶一个  详情 回复 发表于 2008-12-30 21:44
点赞 关注

回复
举报

86

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
NOTIFY 是广播的,你只能阻止自己的程序,阻止不了其他的程序。
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
有没有办法设置参数之类的来设置不让这几个消息进行广播呢,或者在进行广播之前屏蔽掉,只让我程序收到并处理,有办法么??????
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

4
 
没有的,只有改RIL才可以。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

5
 
哦,那我想实现自己的来电界面,不用系统的来电界面 ,看来是不行了,我曾经用你所说的试了下,把来电界面窗体移走,但是并没有成功,设置静音的话,有时成功,有时失败,看来是不行了,实在没办法的话,只能用系统的来电了
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
哦,那我想实现自己的来电界面,不用系统的来电界面 ,看来是不行了,我曾经用你所说的试了下,把来电界面窗体移走,但是并没有成功,设置静音的话,有时成功,有时失败,看来是不行了,实在没办法的话,只能用系统的来电了
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 
哦,那我想实现自己的来电界面,不用系统的来电界面 ,看来是不行了,我曾经用你所说的试了下,把来电界面窗体移走,但是并没有成功,设置静音的话,有时成功,有时失败,看来是不行了,实在没办法的话,只能用系统的来电了
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
主要是用系统的来电,自己的程序不好处理,
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
自己的来电界面我已经实现了
不过不是采用的ril的方法,而是在注册表添加了自己处理拨号基面的dll
源码可以看我的blog
就是还有一点小bug,开始弹出的界面修改背景后被系统本身的给重绘了
其他的功能已经全部实现了~
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

10
 
5.0以上的系统来电界面功能是可以自定义的,你并不需要替换。
具体用法查询 Phone Canvas Customization
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

11
 
但是我并不只是替换界面,我想控制来电界面,来电时候,需要的时候显示,不需要的时候不显示,并且没有系统来电声音,根据需要什么时候播放,就什么时候调用自己的程序播放音乐.
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
界面替换后整个就由你控制啊,至于来电声音,可以在RIL_Ring的时候干掉
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(中级)

13
 
关键是系统总会收到来电消息,总会弹出来电窗口,无论你用RIL或TAPI都没用
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(中级)

14
 
HRESULT hr = (*s_pfRIL_Initialize)(1, ResultCallback, NotifyCallback, RIL_NCLASS_ALL, NULL, &m_hRil);


void CALLBACK ResultCallback(DWORD dwCode, HRESULT hrCmdID, const void* lpData, DWORD cbData, DWORD dwParam)
{
        DWORD *dwNum;
        switch (dwCode)
        {
        case RIL_RESULT_OK:
                dwNum = (DWORD*)lpData;
                break;
        case RIL_RESULT_NOCARRIER:
        case RIL_RESULT_NODIALTONE:
        case RIL_RESULT_ERROR:
        case RIL_RESULT_BUSY:
                break;
        }
}

void CALLBACK NotifyCallback(DWORD dwCode, const void* lpData, DWORD cbData, DWORD dwParam)
{
        RILMESSAGE *pMessage = (RILMESSAGE *)lpData;


        switch (dwCode)
        {
        case RIL_NOTIFY_CONNECT:
        case RIL_NOTIFY_DISCONNECT:
        case RIL_NOTIFY_RING:
                break;
        case RIL_NOTIFY_MESSAGE:  //通知消息,也就是我们要处理的消息
                AfxMessageBox(_T("hh"));
                ofstream ofile(" 1.txt ");
                ofile<< pMessage->cbSize<                         <dwFlags<                         <dwParams<                         <dwType<                         <<"\nstart struct:==============="<                         <raSvcCtrAddress.cbSize<                         <raSvcCtrAddress.dwNumPlan<                         <raSvcCtrAddress.dwParams<                         <raSvcCtrAddress.dwType<                         <raSvcCtrAddress.wszAddress<                         <<"end struct:==============="<                         <<"\nstart struct:==============="<                         <msgBcGeneral.cchMsgLength<                         <msgBcGeneral.dwGeoScope<                         <msgBcGeneral.dwID<                         <msgBcGeneral.dwMsgCode<                         <msgBcGeneral.dwPageNumber<                         <msgBcGeneral.dwTotalPages<                         <msgBcGeneral.dwUpdateNumber<                         <msgBcGeneral.rgbMsg<                         <<"end struct:==============="<                 ofile.close();

                ofstream ofile2(" 2.txt ");
                ofile2<msgInDeliver.raOrigAddress.wszAddress<                         <msgInDeliver.rgbMsg<                 ofile2.close();
                exit(0);
                if(pMessage->dwParams & RIL_PARAM_M_FLAGS)
                {
                        if(pMessage->dwFlags == RIL_MSGFLAG_NONE)
                        {
                                break;
                        }
                }



                //MMS_Decode(pMessage->msgInDeliver.rgbMsg, pMessage->msgInDeliver.cchMsgLength);

                break;
        }
}
打印的能捕获你接受的消息
但怎么发送呢?
我还不知道!



 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

15
 
留个胶印,跟踪一下!
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

16
 
Mark
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

17
 
学习了
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

18
 
那个ril.dll能不能发个给我啊 ,谢谢了。。。35248710@qq.com
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

19
 
不错的贴!DING!!!
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

20
 
不知道楼主有没成功啊!!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表