S60第三版上启动浏览器并打开指定网页

我们通常使用下面的代码启动浏览器并打开指定网页:

void OpenUrlL(const TDesC& aUrl)
{
 if(aUrl.Length() <= 0)
  return;
 
 HBufC* param = HBufC::NewLC( aUrl.Length() + 8 );
 param->Des().Format( _L( "4 %S" ),&aUrl );
 
 // Wap Browser's constants UId
 const TInt KWmlBrowserUid = 0x10008D39;
 TUid id( TUid::Uid( KWmlBrowserUid ) );
 
 TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
 TApaTask task = taskList.FindApp( id );
 if ( task.Exists() )
 {
  HBufC8* param8 = HBufC8::NewLC( param->Length() * 4 );
  param8->Des().Append( *param );
  task.SendMessage( TUid::Uid( 0 ), *param8 ); // Uid is not used
  CleanupStack::PopAndDestroy(); // param8
 }
 else
 {
  RApaLsSession appArcSession;
  User::LeaveIfError(appArcSession.Connect()); // connect to AppArc server
  TThreadId id;
  appArcSession.StartDocument( *param, TUid::Uid( KWmlBrowserUid ), id );
  appArcSession.Close();
 }
 CleanupStack::PopAndDestroy(); // param
 return;
}

然而在S60 3rd的设备上存在两个浏览器"网络"和"服务","网络"UID是0x1020724D,"服务"的UID是0x10008D39,上面的代码会启动"服务",但是确不能打开指定的网页,如果把UID换成"网络"的UID是可以正常打开的,可是在S60 3rd FP1的设备上只剩下一个浏览器,UID为0x10008D39,这就造成了代码通用性的问题,为了避免生成两个版本的程序,我们可以首先查找0x1020724D这个UID对应的程序是否在系统中存在,如果存在说明手机的基于S60 3rd的,如果不存那么就是基于S60 3rd FP1的,这时我们使用0x10008D39就可以了:

void OpenUrlL(const TDesC& aUrl)
{
 if(aUrl.Length() <= 0)
  return;
 
 const TInt KBrowserUid1 = 0x1020724D;
 const TInt KBrowserUid2 = 0x10008D39;
 
 RApaLsSession appArcSession;
 User::LeaveIfError(appArcSession.Connect()); // connect to AppArc server
 
 HBufC* param = HBufC::NewLC( aUrl.Length() + 8 );
 param->Des().Format( _L( "4 %S" ),&aUrl );
 
 // Wap Browser's constants UId
 TUid browserId( TUid::Uid( KBrowserUid1 ) );
 
 TApaAppInfo appInfo;
 if( appArcSession.GetAppInfo( appInfo, browserId ) != KErrNone )
 {
  browserId = TUid::Uid( KBrowserUid2 );
 }
 
 TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
 TApaTask task = taskList.FindApp( browserId );
 if ( task.Exists() )
 {
  HBufC8* param8 = HBufC8::NewLC( param->Length() * 4 );
  param8->Des().Append( *param );
  task.SendMessage( TUid::Uid( 0 ), *param8 ); // Uid is not used
  CleanupStack::PopAndDestroy(); // param8
 }
 else
 {
  TThreadId id;
  appArcSession.StartDocument( *param, browserId, id );
 }
 
 appArcSession.Close();
 CleanupStack::PopAndDestroy(); // param
 return;
}

上面的代码在E50和N95上验证通过. 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值