09年智手各组组长,组员重新招募中 发贴得礼品有实物,有金币和道具 重新招募09年各版版主 每月获奖名单
新人报到加分贴 对我们的意见告诉这里 新增奖品及奖励办法 广告招商
 
发新话题
打印

阻止来电

阻止来电

也就是3个步骤吧:初始化、监控、释放
初始化比较繁琐,TelServer、RPhone、RLine...要一级一级打开

Code:
TInt InitializePhone()
{
TInt theError;
RTelServer::TPhoneInfo phoneInfo;
RPhone::TLineInfo lineInfo;

User::LeaveIfError(theError = iTelServer.Connect());

// 获取TelServer中phone的数量
TInt numberPhones;
User::LeaveIfError(theError = iTelServer.EnumeratePhones(numberPhones));

GetDefaultTSYL(iTsyName); // 获取默认的Tsy模块名字

// Load in the phone device driver
User::LeaveIfError(theError = iTelServer.LoadPhoneModule(iTsyName));

// Get info about the first available phone
User::LeaveIfError(theError = iTelServer.GetPhoneInfo(0, phoneInfo));

// Use this info to open a connection to the phone, the phone is identified by its name
User::LeaveIfError(theError = iPhone.Open(iTelServer, phoneInfo.iName));
iPhone.Initialise();

// 获取phone中line的数量
TInt numLines;
theError = iPhone.EnumerateLines(numLines);

// 获取第一条通话线路
TInt i;
for (i = 0; i < numLines; i++)
{
theError = iPhone.GetLineInfo(i, lineInfo);
// 测试此线路是否属于可通话线路
if (theError == KErrNone && (lineInfo.iLineCapsFlags & RLine::KCapsVoice))
{
theError = iLine.Open(iPhone, lineInfo.iName); // 打开此线路
if (theError != KErrNone)
continue;
break;
}
}

return KErrNone;
}

// ---------------------------------------------------------
// void GetDefaultTSYL()
// ---------------------------------------------------------
void GetDefaultTSYL(TDes& aTSYName)
{
CCommsDatabase* db = CCommsDatabase::NewL(EDatabaseTypeUnspecified);
CleanupStack::PushL(db);

CCommsDbTableView* table = db->OpenTableLC(TPtrC(MODEM));

TInt tabErr = table->GotoFirstRecord();
User::LeaveIfError(tabErr);

TUint32 id;
table->ReadUintL(TPtrC(COMMDB_ID), id);

if (id == (TUint32)KDbNullColNo)
{
User::LeaveIfError(table->GotoNextRecord());
table->ReadUintL(TPtrC(COMMDB_ID),id);
}

table->ReadTextL(TPtrC(MODEM_TSY_NAME), aTSYName);
CleanupStack::PopAndDestroy(2); // table, db
}
然后是开始监控:

Code:
TInt StartObserver()
{
CActive::Cancel();

iLine.NotifyIncomingCall(iStatus, iName);
SetActive();
return ErrVal;
}
你只要在RunL()中放入n你的来电处理的代码,比如用RCall接通线路什么的,一旦有来电就会执行这些代码。当然了如果你希望能连续监测来电,别忘了在RunL中也调用StartObserver。

最后退出前别忘了释放资源:
// ---------------------------------------------------------
// void ReleasePhone()
// ---------------------------------------------------------
void ReleasePhone()
{
        iLine.NotifyIncomingCallCancel();
        iLine.Close();
        iPhone.Close();
        iTelServer.UnloadPhoneModule(iTsyName);
        iTelServer.Close();
}

TOP

单车障碍表演小游戏

提示: 作者被禁止或删除 内容自动屏蔽

TOP

发新话题
版块跳转 
   京ICP备06029169号

本社区言论纯属发表者个人意见  与 智手移动中文网论坛 立场无关