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能力即可