- 设备, 软件 版本:
S60 3rd Edition, S60 3rd Edition, FP1
- 详细描述
当系统要根据MIME类型来寻找并启动一个程序打开某文件时,改程序的CAknDocument::OpenFileL()方法将收到调用。但如果该程序已经运行在后台了,那它的OpenFileL()调用将无法收到。
- 解决方案
数据处理程序不光要完成CEikDocument::OpenFileL(),还要完成CAknAppUi::OpenFile()。
一个通常的解决办法是在其中直接调用document的OpenFileL:
void CHandlerAppUi::OpenFileL( const TDesC& aFileName )
{
CHandlerDocument* doc = static_cast<CHandlerDocument*> ( Document() );
doc->OpenFileL( ETrue, aFileName, iEikonEnv->FsSession() );
}
如果该程序被放置在后台,那调用程序必须要调用TApaTask::SwitchOpenFile():
TBool CCallingAppUi::RefreshDocumentFileL( const TUid& aUid, const TDesC& aFileName )
{
TApaTaskList taskList( iCoeEnv->WsSession() );
TApaTask task = ( taskList.FindApp( aUid ) ); // Find handler application by its UID
if ( task.Exists() )
{
// Calls CAknAppUi::OpenFileL(), requires SwEvent capability
User::LeaveIfError( task.SwitchOpenFile( aFileName ) );
return ETrue;
}
return EFalse;
}