2010-05-24 39 views
2

單擊在我的應用程序上運行的Symbian S60 3rd Edition設備上顯示的URL時,應使手機瀏覽器(已打開)打開指定的URL。讓手機瀏覽器以編程方式在Symbian S60 3rd Ed上打開一個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網址。

我懷疑什麼是錯在SendMessage調用瀏覽器 被帶到前臺後調用:

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

回答

1

也許這將冷卻器,打開你的應用程序中的鏈接,而不是:

_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

這工作。但是我擔心,如果我的應用程序獲得Symbian Signed,代碼可能會導致問題。請參閱OpenWebBrowserL函數[http://code.google.com/p/mobbler/source/browse/src/mobblerappui.cpp?spec=svn47607874e896e0ab6ca07d5207a4453c1c8e973b&r=77a6566e9ea3dc192c97a0e8c23edd613a50dce8]行號2251 – ardsrk 2010-05-25 09:00:49

+0

我不明白爲什麼它不應該'不要被Symbian簽名。誰知道爲什麼它在你的示例中被註釋掉了。 – Riho 2010-05-25 10:36:46

1

我已經成功地使用這種代碼,我相信我是從諾基亞論壇得到:


    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

我試過你發佈的代碼,但無法讓瀏覽器打開URL。只是好奇,你測試過這個電話嗎?我正在使用諾基亞N95。 – ardsrk 2010-05-24 10:46:48

+0

你檢查了你的能力嗎?我很確定我們在所有的第三版手機上都使用了這個功能。 – 2010-05-28 08:26:50

1

您可以輕鬆地使用Qt做,如果你不介意Qt的依賴。

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

希望這會有所幫助。

+0

謝謝。但我不想迫使用戶只爲這一功能安裝Qt。 – ardsrk 2010-05-25 09:44:33

+0

@ardsrk - 可以理解。不過,我想指出它是一個可行的選擇。 :) – Venemo 2010-05-25 11:19:54

1

您是否嘗試過它記錄here,並可以下載here瀏覽器啓動API?

0

您需要爲TApaTask :: SendMessage提供SwEvent功能(但在文檔中未提及此功能)。

相關問題