数据处理应用程序必须完成CAknAppUi::OpenFileL(转)

  • 设备, 软件 版本:

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;
 
}
posted @ 2010-10-09 15:18  冰岛  阅读(202)  评论(0编辑  收藏  举报