现在的位置: 首页 > 综合 > 正文

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

2012年06月21日 ⁄ 综合 ⁄ 共 825字 ⁄ 字号 评论关闭
  • 设备, 软件 版本:

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;
 
}

抱歉!评论已关闭.