Machen Handy-Browser eine URL auf Symbian S60 3rd Ed öffnen programmatisch
-
04-10-2019 - |
Frage
Ein Klick auf eine URL angezeigt in meiner Anwendung auf einem Symbian S60 3rd Edition-Gerät ausgeführt wird, sollte das Telefon Browser machen (die bereits geöffnet ist) öffnen Sie die angegebene URL.
Hier ist der 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;
}
}
Wenn ich diesen Code eine URL zu öffnen, der Browser in den Vordergrund kommt aber nicht an die URL gerichtet erhalten.
Ich vermute, etwas ist in Sendmessage Aufruf falsch, die nach dem Browser aufgerufen wird gebracht wird, in dem Vordergrund:
task.SendMessage(TUid::Uid(0), *parameter); // UID not used
Lösung
Vielleicht wäre es kühlere den Link in Ihrer App öffnen statt:
_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();
Andere Tipps
Ich habe diesen Code erfolgreich eingesetzt, dass ich glaube, ich von Forum Nokia bekam:
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);
Sie können es leicht tun mit Qt, wenn Sie nicht über eine Abhängigkeit von Qt dagegen.
QDesktopServices::openUrl(QUrl("http://yoursite.com/"));
Hope, das hilft.
Sie müssen die SwEvent Fähigkeit für TApaTask :: Sendmessage (aber dies ist in der Dokumentation nicht erwähnt).