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

posted @ 2008-09-02 18:06  musée  阅读(690)  评论(0编辑  收藏  举报