Does your application need a notification whenever a photo is clicked through the camera application? Well, here is how you can achieve it. The following article shows how your application can get a notification as soon as a photo is clicked and stored in the Phone memory, i.e., the C:/Nokia/Images folder. It is achieved using the NotifyChange API of the RFs server.
Remember to include PlatformEnv.lib in your mmp file if you are using the PathInfo API's
Library needed:
LIBRARY PlatformEnv.lib
Source:
#ifndef _NOTIFY_C_
#define _NOTIFY_C_
#include <f32file.h>
#include <e32base.h>
#include "MyDirObserver.h"
class CMyCNotify : public CActive
{
public:
CMyCNotify(RFs& aFs, MDirObserver& aDirObserver);
~CMyCNotify();
void StartMonitoring();
public: // CActive
void RunL();
void DoCancel();
private:
RFs& iFs;
MDirObserver& iDirObserver;
};
#endif
#include <eikenv.h>
#include <PathInfo.h>
#include "MyCNotify.h"
CMyCNotify::CMyCNotify(RFs& aFs, MDirObserver& aDirObserver)
: CActive(EPriorityStandard),
iFs(aFs),
iDirObserver(aDirObserver)
{
CActiveScheduler::Add(this);
}
CMyCNotify::~CMyCNotify()
{
Cancel();
}
void CMyCNotify::RunL()
{
if(iStatus==KErrNone)
{
iDirObserver.CChange();
StartMonitoring();
}
else
; // there was an error so all monitoring will now stop
}
void CMyCNotify::DoCancel()
{
iFs.NotifyChangeCancel(iStatus);
}
void CMyCNotify::StartMonitoring()
{
if(!IsActive())
{
TFileName path = PathInfo::PhoneMemoryRootPath();
path.Append(PathInfo::ImagesPath());
iFs.NotifyChange(ENotifyWrite, iStatus, path);
SetActive();
}
else
; // already waiting for a change so do nothing
}
and finally implement the interface
#ifndef _DIROBSERVER_H_
#define _DIROBSERVER_H_
class MDirObserver
{
public:
virtual void CChange() = 0;
virtual ~MDirObserver(){}
};
#endif
Similarly a notifier can be implemented on E:/Images to capture photos from MMC using PathInfo::MemoryCardRootPath(). Also the same can be used for videos, recorder, etc.