Pregunta

Al hacer clic en una URL aparece en mi aplicación que se ejecuta en un dispositivo Symbian S60 3rd Edition debe hacer que el navegador del teléfono (que ya está abierto) abrir la URL especificada.

Este es el código:

_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;
        }
    }

Cuando uso este código para abrir una URL del navegador viene al primer plano, pero no consigue dirige a la URL.

Sospecho que algo está mal en la llamada SendMessage que se llama después de que el navegador es traído a primer plano:

task.SendMessage(TUid::Uid(0), *parameter); // UID not used
¿Fue útil?

Solución

Tal vez sería más fresco para abrir el enlace dentro de su aplicación en su lugar:

    _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();

Otros consejos

He utilizado este código, que creo que tengo de Forum Nokia:


    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);

Puede hacerlo fácilmente con Qt, si no te importa una dependencia de Qt.

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

Espero que esto ayude.

¿Ha probado el navegador Lanzador de API que se documenta aquí y lata descargarse aquí ?

Es necesario el SwEvent Capacidad para TApaTask :: SendMessage (pero esto no se menciona en la documentación).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top