2010-05-24 12 views
2

En cliquant sur une URL affichée dans mon application exécutée sur un appareil Symbian S60 3rd Edition, le navigateur du téléphone (qui est déjà ouvert) doit ouvrir l'URL spécifiée.Faire un navigateur de téléphone ouvrir une URL sur Symbian S60 3rd Ed par programmation

Voici le code:

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

Lorsque j'utilise ce code pour ouvrir une URL du navigateur vient au premier plan, mais ne soit pas dirigé vers l'URL.

Je soupçonne que quelque chose est faux dans l'appel SendMessage qui est appelé après que le navigateur est amené à l'avant-plan:

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

Répondre

1

Peut-être qu'il serait plus frais pour ouvrir le lien dans votre application à la place:

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

cela a fonctionné. Mais je suis inquiet si le code pourrait causer des problèmes si je reçois mon application Symbian Signed. Voir la fonction OpenWebBrowserL ici [http://code.google.com/p/mobbler/source/browse/src/mobblerappui.cpp?spec=svn47607874e896e0ab6ca07d5207a4453c1c8e973b&r=77a6566e9ea3dc192c97a0e8c23edd613a50dce8] numéro de ligne 2251 – ardsrk

+0

Je ne vois pas pourquoi il ne devrait pas t être signé par Symbian. Qui sait pourquoi cela a été commenté dans votre échantillon. – Riho

1

Je l'ai utilisé avec succès ce code, que je crois que je suis arrivé du 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); 

+0

J'ai essayé le code que vous avez posté mais je n'ai pas pu obtenir le navigateur pour ouvrir l'URL. Juste curieux, sur quel téléphone avez-vous testé cela? J'utilise un Nokia N95. – ardsrk

+0

Avez-vous vérifié vos capacités? Je suis sûr que nous l'avons utilisé sur tous les téléphones de la 3ème édition. –

1

vous pouvez facilement le faire avec Qt, si vous ne me dérange pas une dépendance sur Qt.

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

Espérons que cela aide.

+0

Merci. Mais je ne veux pas obliger les utilisateurs à installer Qt pour cette seule fonctionnalité. – ardsrk

+0

@ardsrk - Compréhensible. Pourtant, je voulais le souligner comme une option viable. :) – Venemo

1

Avez-vous essayé l'API de lancement du navigateur qui est documenté here et peut être téléchargé here?

0

Vous avez besoin de la capacité SwEvent pour TApaTask :: SendMessage (mais cela n'est pas mentionné dans la documentation).