Symbian 之浏览器

一.S40中只能调用系统的浏览器,而且调用后需要将j2me程序关闭掉,否则浏览器出不来:

platformRequest("http://www.baidu.com");
Thread.sleep(1000);
notifyDestroyed();

 

二.S60中调用系统浏览器:

void OpenBrower(HBufC* aUrl)
    {
    HBufC* param = HBufC::NewLC (aUrl->Length ()+ 4);
    param->Des().Copy ( _L( "4 " ));

    const TInt KBrowserUid = 0x10008D39;
    TUid id( TUid::Uid ( KBrowserUid));
    TApaTaskList taskList( CEikonEnv::Static()->WsSession ());

    TApaTask task = taskList.FindApp ( id);
    param->Des().Append (aUrl->Des ());

    if ( task.Exists ())
        {
        RWsSession WsSession = CCoeEnv::Static()->WsSession ();
        TInt ForegroundWinGroup = WsSession.GetFocusWindowGroup ();
       
        HBufC8* param8 = HBufC8::NewLC ( param->Length ());
        param8->Des().Append (*param);
        task.SendMessage (TUid::Uid ( 0), *param8); // Uid is not used
       
        if ( task.WgId () != ForegroundWinGroup) //If the native camera application is on the foreground
            {
            task.BringToForeground ();
            }
       
        CleanupStack::PopAndDestroy ();
        }
    else
        {
        RApaLsSession appArcSession;
        User::LeaveIfError (appArcSession.Connect ()); // connect to AppArc server
        TThreadId id;
        appArcSession.StartDocument (*param, TUid::Uid ( KBrowserUid), id);
        appArcSession.Close ();
        }

    CleanupStack::PopAndDestroy (); // param
    }

以上两个方法都是从网上Copy过来的,在实际的项目中通过测试,笔记一下。

由于不能自由DIY,也懒得深入,重点来看看Symbian中的浏览器控件。

 

项目需要S60 2nd,那就从2nd入手了。

由于以前没有接触过浏览器控件,虽然做过几个项目,也没有认真地看过Symbian的帮助文档,感觉如果不是真需要了解什么东西而去看文档的话,是很枯燥的。

人懒最喜欢的就是google了,一搜就可以得到想要的代码。

第一搜:浏览器控件需要CBrCtlInterface,嗯,顺藤摸瓜继续搜。

第二搜:Series_60_Browser_Control_API_Developer_Guide_v2_0_en.pdf

这个文档说明是需要3rd的,这个简单再搜一个V1不就得了,可搜过来搜过去就没找到V1的,

(其实在2nd的帮助文档Developer Guides->Browser Control API Developer's Guide 下可以找到这个文档:)

看来搜到此结束了,看看V2里面都有什么,3rd居然有例子。

果然S60_3rd_MR/S60Ex/BrCtlSampleApp目录下面有很多源代码。

一堆observer,有些糊涂了,管它3rd、2nd,能用就是好代码。

 

先创建一个2nd的工程,

先在mmp文件中加库文件

LIBRARY BrowserEngine.lib

后面还有用到两个:

LIBRARY apmime.lib apgrfx.lib

 

下来重点改Container文件了,先include两个头文件

#include <brctlinterface.h>
#include <brctldefs.h>

追加接口以及方法:

class CTestBrowserContainer : public CCoeControl, MCoeControlObserver, MBrCtlDataLoadSupplier

 

private:
    void HandleControlEventL(CCoeControl *aControl, TCoeEvent aEventType);
    void CancelLoad();

 

不知道这两个接口是干嘛的,那就写两个空方法:

void CTestBrowserContainer::HandleControlEventL(CCoeControl *aControl, TCoeEvent aEventType)
    {
    }

void CTestBrowserContainer::CancelLoad()
    {
    }

 

一般来说,开头第一步总是最难的,其它的不写了,build一下看看。

果然编译错误,找不到variant.h文件,3rd里也没有找到,晕啊。

 

看来又得google了,终于搜出一篇论坛文章,说是自己写一个 variant.h就可以了,

于是建了一个空文件,再编译,果然过了,那就继续GO:

在头文件中添加变量:

private:
    TInt iCommandBase;
    TInt iBrCtlCapabilities;
    CBrCtlInterface* iBrCtlInterface;

 

有指针当然得释放了,呵呵,虽然还没有创建,delete先:

CTestBrowserContainer::~CTestBrowserContainer()
    {
    if (iBrCtlInterface)
        {
        delete iBrCtlInterface;
        }
    }

创建一个最简单的CBrCtlInterface:

void CTestBrowserContainer::ConstructL(

...

iCommandBase = TBrCtlDefs::ECommandIdBase;

iBrCtlCapabilities = TBrCtlDefs::ECapabilityDisplayScrollBar

                             | TBrCtlDefs::ECapabilityLoadHttpFw

                             | TBrCtlDefs::ECapabilityClientNotifyURL
                             | TBrCtlDefs::ECapabilityClientResolveEmbeddedURL;

TRect rect(Position(), Size());

iBrCtlInterface = CreateBrowserControlL( this,
            rect,
            iBrCtlCapabilities,
            iCommandBase,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL);

_LIT(KUrl, "http://www.baidu.com");
iBrCtlInterface->LoadUrlL( KUrl );

}

 

开头第一步总是最难的,先运行一下看看效果,


 

 

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值