📄 launchsysappengine.cpp
字号:
/*
*========================================================
* 文件名 : LaunchSysAppEngine.h
* 功能 : 调用手机自带的应用程序
* 创建 : 13/11/2006 chenqing
* 说明 :
* 项目 : Netfrog
* 版本 : 1.0
* 版权 : 深圳千寻网有限公司
*=========================================================
*/
#include <aknnotewrappers.h> //for note dialog
#include <apgcli.h> //Link against: apgrfx.lib for Class RApaLsSession
#include <apmstd.h> //Link against: apmime.lib Class TDataType
#include <apgtask.h> //Link against: apgrfx.lib Class TApaTaskList
#include <eikenv.h> //for CEikon::Static
#include "LaunchSysAppEngine.h"
#include "ToUnicode.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
const TUid CameraId1 = {0x1000593F}; //第一版的摄像机ID,可能比较老的机型使用此ID
const TUid CameraId2 = {0x101f857a}; //第二版的摄像机ID
const TUid CameraId3 = {0x101ffa86}; //第三版的摄像机ID,NOKIA已公布第三版使用此ID,但还未见使用
CGALaunchSysAppEngine::CGALaunchSysAppEngine()
{
}
CGALaunchSysAppEngine::~CGALaunchSysAppEngine()
{
}
/*********************************************************
* 功能描述:
* 通过文件关联的方式来启用手机自带的应用程序
*
* 参数说明:
* aFileName : [const TDesC&]文件全路径
* 返回值:
* TBool : 如果成功启用返回ETrue,否则返回EFalse
* 注意事项:
* 无
**********************************************************/
TBool CGALaunchSysAppEngine::LaunchAssociateFileL(const TDesC& aFileName)
{
//文件路径不可能不大于0
if(aFileName.Length() <= 0)
{
return EFalse;
}
//与这个文件关联的手机自带应用程序的UID
TUid imageViewerId;
//手机已安装应用程序的架构Session
RApaLsSession appSession;
//数据类型,也即文件类型
TDataType dataType;
//手机正在运行的所有应用程序列表
TApaTaskList taskList( iEikonEnv->WsSession());
//应用程序架构的Session必须要先连接
User::LeaveIfError(appSession.Connect());
//查找与传递文件相关联的应用程序的UID和文件类型
TRAPD( error,appSession.AppForDocument(aFileName,imageViewerId,dataType));
if(error != KErrNone)
{
appSession.Close();
return EFalse;
}
//这个相关联应用程序不是调用这个函数的本身
if( imageViewerId != TUid::Uid(0)) //0 means itself
{
//看在正在运行的程序列表里有没有这个UID
TApaTask imageTask = taskList.FindApp(imageViewerId);
//查看该应用程序是否正在运行
if(imageTask.Exists())
{
//把该应用程序置于顶端
imageTask.BringToForeground();
//使用该应用程序执行本文件
TRAPD(error,imageTask.SwitchOpenFile(aFileName));
if(error != KErrNone)
{
appSession.Close();
return EFalse;
}
}
else
{
//如果该应用程序没启动,启动它并让它执行本文件
TThreadId id;
appSession.StartDocument(aFileName,imageViewerId,id);
}
appSession.Close();
return ETrue;
}
appSession.Close();
return EFalse;
}
TBool CGALaunchSysAppEngine::LaunchSysAppByUidL(const TUid id)
{
//应用程序的架构Session
RApaLsSession appSession;
//手机运行中的所有应用程序列表
TApaTaskList taskList(iEikonEnv->WsSession());
//应用程序架构的Session必须要先连接
User::LeaveIfError(appSession.Connect());
//这个相关联应用程序不是调用这个函数的本身
if( id != TUid::Uid(0))
{
//在正在运行的任务列表中查找该应用程序是否正在运行
TApaTask appTask = taskList.FindApp(id);
//正在运行
if(appTask.Exists())
{
//把该应用程序带到顶端窗口
appTask.BringToForeground();
}
else
{
//如果没有运行,启动它.
_LIT(newDoc,"");
TThreadId threadId;
//创建一个Document,"newDoc"值没什么,目的只是启动该应用程序
appSession.CreateDocument(newDoc,id,threadId);
}
}
else
{
appSession.Close();
return EFalse;
}
appSession.Close();
return EFalse;
}
TBool CGALaunchSysAppEngine::LaunchCameraL()
{
//试图打开第二版的摄像机
TRAPD(error2,LaunchSysAppByUidL(CameraId2));
if(error2 != KErrNone)
{
//试图打开第三版的摄像机
TRAPD(error3,LaunchSysAppByUidL(CameraId3));
if(error3 != KErrNone)
{
//试图打开第一版的摄像机
TRAPD(error1,LaunchSysAppByUidL(CameraId1));
if(error1 != KErrNone)
{
TText8* str = (TText8*)"不能打开摄像机";
HBufC16* msg = ToUnicode::ConvertL(str);
CleanupStack::PushL(msg);
CAknErrorNote* note = new(ELeave)CAknErrorNote();
note->ExecuteLD(*msg);
CleanupStack::PopAndDestroy(msg);
msg = NULL;
return EFalse;
}
return ETrue;
}
return ETrue;
}
else
{
return ETrue;
}
return EFalse;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -