This page was last modified 22:45, 20 November 2007.
Autostart applications on S60 2nd Edition phones
From Forum Nokia Wiki
| "Danger, Will Robinson!" |
|---|
|
Autostart applications in S60 2nd Edition phones. This is taken from mika raento's web-site,for information check this link.
Contents |
In .mmp file
target CL_AUTOSTART.MDL targettype MDL targetpath \system\recogs\ uid 0x10003A19 0x09A770B5 SOURCEPATH ..\src SOURCE cl_autostart.cpp LANG SC USERINCLUDE . ..\inc SYSTEMINCLUDE . \epoc32\include \epoc32\include\libc library EUSER.LIB APMIME.LIB efsrv.lib apparc.lib apgrfx.lib LIBRARY efile.lib
Header File
#if !defined(__CL_AUTOSTART_H__) #define __CL_AUTOSTART_H__ #if !defined(__APMREC_H__) #include <apmrec.h> #endif #include <apgcli.h> #include <f32file.h> #include <apacmdln.h> #include <e32std.h> #include <apmstd.h> class CclAutostart : public CApaDataRecognizerType { public: // from CApaDataRecognizerType CclAutostart(); TUint PreferredBufSize(); TDataType SupportedDataTypeL(TInt aIndex) const; static void StartThread(); static TInt StartAppThreadFunction(TAny* aParam); static void StartAppThreadFunctionL(); private: // from CApaDataRecognizerType void DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer); }; #endif
In .cpp File
#include <apmrec.h> #include <apmstd.h> #include "cl_autostart.h" const TUid KUidemAclAutostart={0x09A770B5}; CclAutostart::CclAutostart() :CApaDataRecognizerType(KUidemAclAutostart, CApaDataRecognizerType::ENormal) { iCountDataTypes = 1; } TUint CclAutostart::PreferredBufSize() { // no buffer recognition yet return 0; } TDataType CclAutostart::SupportedDataTypeL(TInt /*aIndex*/) const { return TDataType(); } void CclAutostart::DoRecognizeL(const TDesC& /*aName*/, const TDesC8& /*aBuffer*/) { // this function is never called } void CclAutostart::StartThread() { TInt res = KErrNone; //create a new thread for starting our application RThread * startAppThread; startAppThread = new RThread(); User::LeaveIfError( res = startAppThread->Create( _L("Autostart starter"), CclAutostart::StartAppThreadFunction, KDefaultStackSize, KMinHeapSize, KMinHeapSize, NULL, EOwnerThread) ); startAppThread->SetPriority(EPriorityNormal/*EPriorityLess*/); startAppThread->Resume(); startAppThread->Close(); } TInt CclAutostart::StartAppThreadFunction(TAny* /*aParam*/) { //wait 5 seconds... RTimer timer; // The asynchronous timer and ... TRequestStatus timerStatus; // ... its associated request status timer.CreateLocal(); // Always created for this thread. // get current time (microseconds since 0AD nominal Gregorian) TTime time; time.HomeTime(); // add ten seconds to the time TTimeIntervalSeconds timeIntervalSeconds(45); time += timeIntervalSeconds; // issue and wait timer.At(timerStatus,time); User::WaitForRequest(timerStatus); // create a TRAP cleanup CTrapCleanup * cleanup = CTrapCleanup::New(); TInt err; if( cleanup === NULL ) { err = KErrNoMemory; } else { TRAP( err, StartAppThreadFunctionL() ); } delete cleanup; if (err!=KErrNone) User::Panic(_L("autostart"), err); return err; } void CclAutostart::StartAppThreadFunctionL() { #ifdef __WINS__ //This is the uid of the starter application,which you want to autostart. const TUid starter_uid= { 0x05CCC0B0 }; RApaLsSession ls; User::LeaveIfError(ls.Connect()); CleanupClosePushL(ls); _LIT(filen, ""); // dummy TThreadId dummy; User::LeaveIfError( ls.StartDocument(filen, starter_uid, dummy) ); CleanupStack::PopAndDestroy(); #else //Replace this starter.app with the app which you want to autostart. TFileName fnAppPath = _L("\\system\\apps\\starter.app"); RProcess server; CleanupClosePushL(server); User::LeaveIfError(server.Create(fnAppPath, _L(""))); server.Resume(); CleanupStack::PopAndDestroy(); #endif } EXPORT_C CApaDataRecognizerType* CreateRecognizer() { CApaDataRecognizerType* thing = new CclAutostart(); //start thread for our application CclAutostart::StartThread(); return thing; } // DLL entry point GLDEF_C TInt E32Dll(TDllReason /*aReason*/) { return KErrNone; }
In .Pkg file
"cl_autostart.mdl" -"!:\system\recogs\cl_autostart.mdl"
Tips
- It is always recommended that the time interval to autostart the app should be equal to or more than 10 seconds. This is because in slower phones for e.g. Nokia 6600 or Nokia 3230 the boot process after loading a number of applications becomes very slow. If the autostart application is to load during this time the boot becomes much slower.
- The above code starts the application on phone boot up and the application remains in the foreground. The application staying in the foreground may not be the actual behavior as wanted. You may want that the application should autostart and stay in the background. This can be achieved for e.g. by using some flag file, but the launch cannot be hidden. The application will come in the foreground and then go to the background.
| Related Discussions | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| how to make my app not display in "App Manage"menu | IsGoldenFinger | General Symbian C++ | 6 | 2007-08-29 08:24 |
| S60 3rd edition copy installation | vtulai | Symbian Tools & SDKs | 1 | 2005-12-20 07:51 |
| 应用程序与设备不兼容! | container | Symbian | 5 | 2006-09-20 07:18 |
| 问一下模拟器用摄像头的问题 | modeman | Symbian | 1 | 2006-12-20 15:54 |
| BTObex Example Crashes when starting server | kaseychen | Bluetooth Technology | 2 | 2006-08-21 12:09 |
