S60中请求浏览器并跳转到指定地址的方法
void LaunchBrowserL(const TDesC& strUrl)
{
HBufC* unExtendedLink = strUrl.Alloc();
CleanupStack::PushL(unExtendedLink);
HBufC* link = unExtendedLink->ReAllocL(unExtendedLink->Length() + 2);
CleanupStack::Pop(unExtendedLink);
CleanupStack::PushL(link);
link->Des().Insert(0, KCharacterFourPlusSpace);
TApaTaskList taskList(CEikonEnv::Static()->WsSession());
TApaTask task = taskList.FindApp(KWmlBrowserUid);
if (task.Exists())
{
HBufC8* param8 = HBufC8::NewLC(link->Length());
param8->Des().Append(*link);
task.SendMessage(TUid::Uid(0), *param8);
CleanupStack::PopAndDestroy(param8);
}
else
{
RApaLsSession appArcSession;
User::LeaveIfError(appArcSession.Connect()); // connect to AppArc server
TThreadId id;
appArcSession.StartDocument(*link, KWmlBrowserUid, id);
appArcSession.Close();
}
CleanupStack::PopAndDestroy(link);
}
此代码的作用是:
1、在浏览器没有打开的时候,打开浏览器请求地址;
2、而如果浏览器已经打开了,向浏览器的task发送一个消息(SendMessage方法),消息包含请求的地址。
其中,在S60 3rd版要使第二步成功,需要如下能力:
ReadDeviceData WriteDeviceData ProtServ NetworkControl NetworkServices SwEvent LocalServices ReadUserData WriteUserData UserEnvironment
另外一种方法是,在检测浏览器实例正在运行时,将浏览器关闭掉:task.KillTask();方法。此方法不需要以上几种能力,只需要有PowerMgmt能力即可