Сделайте так, чтобы браузер телефона открывал URL на Symbian S60 3rd Ed программно - PullRequest
2 голосов
/ 24 мая 2010

При нажатии на URL-адрес, отображаемый в моем приложении, работающем на устройстве Symbian S60 3rd Edition, браузер телефона (который уже открыт) должен открыть указанный URL-адрес.

Вот код:

_LIT( KUrlPrefix,"4 " )

void CMunduIMAppUi::OpenInBrowser(const TDesC& aUrl)
    {
    HBufC *url = NULL;
    const TInt KWmlBrowserUid =0x10008D39; 
    TUid id( TUid::Uid( KWmlBrowserUid ) );
    TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
    TApaTask task = taskList.FindApp( id );

    // Checks if the browser is already open
    if ( task.Exists() )
        {
        HBufC8* parameter = HBufC8::NewL( aUrl.Length()+ KUrlPrefix().Length());
        parameter->Des().Copy(KUrlPrefix);
        parameter->Des().Append(aUrl);

        task.BringToForeground();
        task.SendMessage(TUid::Uid(0), *parameter); // UID not used

        delete parameter;
        parameter = NULL;
        }
    }

Когда я использую этот код для открытия URL-адреса, браузер выходит на передний план, но не направляется на URL-адрес.

Я подозреваю, что что-то не так в вызове SendMessage, который вызывается после браузера выводится на передний план:

task.SendMessage(TUid::Uid(0), *parameter); // UID not used

Ответы [ 5 ]

1 голос
/ 25 мая 2010

Вы пробовали API Browser Launcher, который задокументирован здесь и может быть загружен здесь ?

1 голос
/ 24 мая 2010

Вы можете легко сделать это с Qt, если вы не возражаете против зависимости от Qt.

QDesktopServices::openUrl(QUrl("http://yoursite.com/"));

Надеюсь, это поможет.

1 голос
/ 25 мая 2010

Возможно, было бы круче открыть ссылку внутри вашего приложения:

    _LIT( KTestUrlPrefix,"4 " );
iOverriddenSettings = new (ELeave) TBrowserOverriddenSettings;
iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsSmallScreen, EBrowserOverFullScreenValueSoftKeysOnly);//(TUint) 1 );
iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsAutoLoadImages, (TUint) 1 );
iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsFontSize, (TUint) 0 );
iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsFullScreen, EBrowserOverFullScreenValueNormal);//(TUint) 0 );
iOverriddenSettings->SetBrowserSetting( EBrowserOverSettingsCustomAp, (TUint) iIAP ); //access point ID 


HBufC* parameter = HBufC::NewLC( KTestUrlPrefix().Length() + aLink.Length() );
parameter->Des().Copy( KTestUrlPrefix );
parameter->Des().Append( aLink );
if(iLauncher)
{
    delete iLauncher;
    iLauncher = NULL;
}
iLauncher = CBrowserLauncher::NewL();
iLauncher->LaunchBrowserEmbeddedL( *parameter, NULL, NULL, iOverriddenSettings );
CleanupStack::PopAndDestroy();
1 голос
/ 24 мая 2010

Я успешно использовал этот код, который, как мне кажется, я получил от Forum Nokia:

<code>
    RApaLsSession apaLsSession;
    //Note that the UID of the OSS browser in S60 3rd Edition is 0x1020724D
    //and from S60 3rd Edition, FP1 onwards 0x10008D39.
    const TUid KOSSBrowserUidValue = {0x10008D39};
    //Parameter type 4: Start/Continue the browser specifying a URL =>
    //Parameter = "4"+" "+""
    _LIT(KParam4, "4 ");


    HBufC* param = HBufC::NewLC(KParam4().Length()+aUrl.Length());
    param->Des().Copy(KParam4);
    param->Des().Append(aUrl);

    //Find the browser application
    TUid id(KOSSBrowserUidValue);
    TApaTaskList taskList(iEikonEnv->WsSession());
    TApaTask task = taskList.FindApp(id);
    if(task.Exists())
        {
        //Continue the application
        task.BringToForeground();
        HBufC8* param8 = HBufC8::NewLC(param->Length());
        param8->Des().Append(*param);
        task.SendMessage(TUid::Uid(0), *param8); // UID not used
        CleanupStack::PopAndDestroy(param8);
        }
    else
        {
        if(!apaLsSession.Handle())
            {
            User::LeaveIfError(apaLsSession.Connect());
            CleanupClosePushL(apaLsSession);
            }
        //Start the application
        TThreadId thread;
        User::LeaveIfError(apaLsSession.StartDocument(*param, KOSSBrowserUidValue, thread));
        CleanupStack::PopAndDestroy(&apaLsSession);//   .Close();
        }
    CleanupStack::PopAndDestroy(param);

0 голосов
/ 28 октября 2010

Вам нужна возможность SwEvent для TApaTask :: SendMessage (но это не упоминается в документации).

...