Сделайте так, чтобы браузер телефона открывал URL на Symbian S60 3rd Ed программным способом
При нажатии на 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 ответов
Решение
Возможно, было бы лучше открыть ссылку внутри вашего приложения:
_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();
Вы можете легко сделать это с Qt, если вы не возражаете против зависимости от Qt.
QDesktopServices::openUrl(QUrl("http://yoursite.com/"));
Надеюсь это поможет.
2010-05-25 08:46
Я успешно использовал этот код, который, как мне кажется, я получил от 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);
Вам нужна возможность SwEvent для TApaTask::SendMessage (но это не упоминается в документации).