⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 launchcamera_ttt.cpp

📁 用于Symbian手机上面
💻 CPP
字号:
// LaunchCamera.cpp: implementation of the CLaunchCamera class.
//
//////////////////////////////////////////////////////////////////////

#include <eikenv.h> //for CEikProcess
#include <eikproc.h> //for CEikProcess
#include <PathInfo.h> //for PathInfo
#include <apgcli.h>  //for RApaLsSession
#include <apacln.h>  // for TApaDocCleanupItem



#include "LaunchCamera.h"

CLaunchCamera* CLaunchCamera::NewL(MCameraEvenCallBack * pEvenCallBack,CEikonEnv * pEikonEnv )
{
        CLaunchCamera* self = NewLC(pEvenCallBack ,pEikonEnv);
        CleanupStack::Pop(self);
        return self;
}


CLaunchCamera* CLaunchCamera::NewLC(MCameraEvenCallBack * pEvenCallBack,CEikonEnv * pEikonEnv )
{

        CLaunchCamera* self = new (ELeave) CLaunchCamera;

        CleanupStack::PushL(self);

        self->ConstructL(pEvenCallBack,pEikonEnv);

        return self;

}

 

void CLaunchCamera::ConstructL(MCameraEvenCallBack * pEvenCallBack , CEikonEnv * pEikonEnv)

{

        m_pProcess = NULL ;

        m_pAppdoc = NULL ;

        m_pCallBack = pEvenCallBack ;

        m_pEikonEnv = pEikonEnv ;

        m_bCloseCamera = FALSE ;

}

 

CLaunchCamera::CLaunchCamera()

{

        m_pAppdoc = NULL ;        

}

 

CLaunchCamera::~CLaunchCamera()

{

        //CloseCamera() ;

        m_pEikonEnv = NULL ;

        m_pCallBack = NULL ;

}

 

 

// Function name        : CLaunchCamera::OpenCamera

// Description            : Open camera and review

// Return type                : TURE if successful, otherwise FALSE

TBool CLaunchCamera::OpenCamera()

{

        if( m_pEikonEnv == NULL ) return FALSE ;

        

        TApaAppInfo appInfo; 

        if( FindCamera( appInfo) == FALSE ) return FALSE ;

 

        m_pProcess = m_pEikonEnv->Process(); 

 

        m_pAppdoc = m_pProcess->AddNewDocumentL(appInfo.iFullName, appInfo.iUid);

        ASSERT( m_pAppdoc != NULL ) ;

        

        TApaDocCleanupItem cleanup(m_pProcess, m_pAppdoc); 

        CleanupStack::PushL(cleanup);

 

        m_pAppdoc->NewDocumentL(); 

        CleanupStack::Pop(); // cleanup 

        

        m_bCloseCamera = FALSE ;

        

        m_pAppdoc->EditL(this, EFalse );

 

        return TRUE ;

}

 

void CLaunchCamera::CloseCamera()

{

        if( m_pProcess )

        {

                m_pProcess->DestroyDocument(m_pAppdoc) ;

                m_pProcess = NULL ;

                m_pAppdoc = NULL ;

        }

 

        m_bCloseCamera = TRUE ;

}

_LIT(KCameraAppString , "z:\\system\\apps\\camcorder\\camcorder.app"); 

TBool CLaunchCamera::FindCamera(TApaAppInfo & appInfo) 

{

        RApaLsSession apaTmpLs; 

 

         User::LeaveIfError(apaTmpLs.Connect()); 

         CleanupClosePushL(apaTmpLs); 

 

        User::LeaveIfError(apaTmpLs.GetAllApps());

 

        TBool bFindCamera = FALSE ;

        appInfo.iFullName.FillZ(appInfo.iFullName.MaxLength()) ;

        appInfo.iFullName.Zero() ;

 

        while(apaTmpLs.GetNextApp(appInfo) == KErrNone)

        {

                appInfo.iFullName.LowerCase() ;

 

                TInt nTmpID = appInfo.iFullName.Compare(KCameraAppString) ;

                if( nTmpID == 0 )

                {

                        bFindCamera = TRUE ;

                        break ;

                }

 

                appInfo.iFullName.FillZ(appInfo.iFullName.MaxLength()) ;

                appInfo.iFullName.Zero() ;

        } 

 

        CleanupStack::PopAndDestroy(); // apaTmpLs

 

        return bFindCamera ;

}

 

// Function name        : CLaunchCamera::NotifyExit

// Description            : when selected "select", frame will call this function

// Return type                : void 

// Argument         : TExitMode aMode

void CLaunchCamera::NotifyExit(TExitMode aMode)

{

        if( aMode == EKeepChanges )

        {

                //不能在这里调,否则设备为crash

                //m_pProcess->DestroyDocument(m_pAppdoc) ;

                FindNewFile() ;

        }

    else

    {

                //m_pProcess->DestroyDocument(m_pAppdoc) ;

                if( m_pCallBack )

                        m_pCallBack->Camera_HandleFile(CFT_NoFind, _L("FileNotSelect"));

    }

 

        m_bCloseCamera = TRUE ;

}

 

TBool CLaunchCamera::EnableCloseCamera() 

{

        return m_bCloseCamera ;

}

 

// Function name        : CLaunchCamera::FindNewFile

// Description            : Search the last new files

//if find the last new file, call Camera_HandleFile to caller

// Return type                : void 

 

void CLaunchCamera::FindNewFile()

{

        if( m_pCallBack == NULL ) return ;

        

        TFileName PhoneIamgePath ;

        TFileName MemoryIamgePath ;

        TFileName PhoneVideoPath ;

        TFileName MemoryVideoPath ;

 

        PhoneIamgePath.Append(PathInfo::PhoneMemoryRootPath()) ;

        PhoneIamgePath.Append(PathInfo::ImagesPath());

 

        MemoryIamgePath.Append(PathInfo::MemoryCardRootPath()) ;

        MemoryIamgePath.Append(PathInfo::ImagesPath()) ;

 

        PhoneVideoPath.Append(PathInfo::PhoneMemoryRootPath()) ;

        PhoneVideoPath.Append(PathInfo::VideosPath()) ;

 

        MemoryVideoPath.Append(PathInfo::MemoryCardRootPath()) ;

        MemoryVideoPath.Append(PathInfo::VideosPath()) ;

 

        TTime  tFileTime(0) ;

        TTime  tLastFileTime(0) ;

        TInt   nIndex = -1 ;

 

        //查找最新时间的文件

        //find phone card image

        if( GetLastFile(PhoneIamgePath , tFileTime) == TRUE )

        {

                if( tFileTime > tLastFileTime )

                {

                        tLastFileTime = tFileTime ;

                        nIndex = 0 ;

                }        

        }

        //find memory card image

        if( GetLastFile(MemoryIamgePath , tFileTime) == TRUE )

        {

                if( tFileTime > tLastFileTime )

                {

                        tLastFileTime = tFileTime ;

                        nIndex = 1 ;

                }        

        }

        //find phone memory video file

        if( GetLastFile(PhoneVideoPath , tFileTime) == TRUE )

        {

                if( tFileTime > tLastFileTime )

                {

                        tLastFileTime = tFileTime ;

                        nIndex = 2 ;

                }        

        }

        //find memory card video files

        if( GetLastFile(MemoryVideoPath , tFileTime) == TRUE )

        {

                if( tFileTime > tLastFileTime )

                {

                        tLastFileTime = tFileTime ;

                        nIndex = 3 ;

                }        

        }

 

        //判断是那个目录下的文件

        switch(nIndex)

        {

        case 0:

                m_pCallBack->Camera_HandleFile(CFT_Image , PhoneIamgePath) ;

                break;

        case 1:

                m_pCallBack->Camera_HandleFile(CFT_Image , MemoryIamgePath) ;

                break;

        case 2:

                m_pCallBack->Camera_HandleFile(CFT_Video , PhoneVideoPath) ;

                break;

        case 3:

                m_pCallBack->Camera_HandleFile(CFT_Video , MemoryVideoPath) ;

                break;

        default:

                m_pCallBack->Camera_HandleFile(CFT_NoFind , TFileName(0) ) ;

                break;

        }

}

 

//////////////////////////////////////////////////////////////////////////

//查找最新的图像文件,只查找到二级目录

//

//

//////////////////////////////////////////////////////////////////////////

 

TBool CLaunchCamera::GetLastFile(TFileName & filePath , TTime & fileTime) 

{

        RFs sessionRFs; 

        User::LeaveIfError(sessionRFs.Connect()); 

 

        CDir* FileList;

        CDir* dirList ;

 

        //读出文件夹下文件信息,并对所有的文件进行降序排列

        TInt nError = sessionRFs.GetDir(filePath,KEntryAttNormal, ESortByDate|EDescending , FileList , dirList); 

 

        if( nError != KErrNone )

        {

                //ASSERT(FALSE) ;

                sessionRFs.Close() ;

                return FALSE;

        }        

        else if( nError == KErrNone )

        {

                TFileName  tmpFileName(0) ;

                TTime tmpTime(0) ;

 

                TTime  tLastFileTime(0) ;

                TFileName tLastFile(0) ;

                

                //file 

                if( FileList->Count() > 0 )

                {

                        tmpFileName.FillZ(KMaxFileName) ;

                        tmpFileName.Zero() ;

                        tmpFileName.Append(filePath) ;

                        tmpFileName.Append((*FileList)[0].iName) ;

                

                        //get file modification time

                        sessionRFs.Modified(tmpFileName , tmpTime ) ;

 

                        if( tmpTime > tLastFileTime )

                        {

                                tLastFileTime = tmpTime ;

                                tLastFile.FillZ(KMaxFileName) ;

                                tLastFile.Zero() ;

                                tLastFile.Append(tmpFileName) ;

                        }

                }

                delete FileList ;

 

                //dir

                TInt nDirCount = dirList->Count() ;

                for( int i = 0 ; i< nDirCount ; i++ )

                {

                        tmpFileName.FillZ(KMaxFileName) ;

                        tmpFileName.Zero() ;

                        tmpFileName.Append(filePath) ;

                        tmpFileName.Append((*dirList)[i].iName) ;

                        tmpFileName.Append(_L("\\")) ;

 

                        if( GetLastNewFile( tmpFileName , tmpTime ) == TRUE )

                        {

                                if( tmpTime > tLastFileTime )

                                {

                                        tLastFileTime = tmpTime ;

                                        tLastFile.FillZ(KMaxFileName) ;

                                        tLastFile.Zero() ;

                                        tLastFile.Append(tmpFileName) ;

                                }

                        }                

                }        

                delete dirList; 

 

                //是否找到新的文件

                if( tLastFileTime > TTime(0) )

                {

                        filePath.FillZ(KMaxFileName) ;

                        filePath.Zero() ;

                        filePath.Append(tLastFile) ;

                        fileTime = tLastFileTime ;

                }

                else

                {

                        sessionRFs.Close() ;

                        return FALSE ;

                }

        }

 

        sessionRFs.Close() ;

 

        return TRUE ;

}

 

//用KEntryAttNormal只查找目录中的文件

TBool CLaunchCamera::GetLastNewFile(TFileName & filePath , TTime & fileTime) 

{

        RFs sessionRFs; 

        User::LeaveIfError(sessionRFs.Connect()); 

 

        CDir* dirList;

 

        //读出文件夹下文件信息,并对所有的文件进行降序排列

        TInt nError = sessionRFs.GetDir(filePath,KEntryAttNormal, ESortByDate|EDescending,dirList); 

        if( nError != KErrNone )

        {

                sessionRFs.Close() ;

                return FALSE;

        }        

        else if( dirList->Count() > 0 )

        {

                //get filename

                filePath.Append((*dirList)[0].iName) ;

 

                //get file modification time

                sessionRFs.Modified(filePath , fileTime ) ;                        

                delete dirList; 

        }

        else

        {

                sessionRFs.Close() ;

                return FALSE;

        }

 

        sessionRFs.Close() ;

 

        return TRUE ;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -