Beantwortet Startcodes, die geräteabhängig sein können.
Err PalmLsnSpecialLaunch( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags )
cmd Der Code für den Palm OS-Anwendungsstart.
cmdPBP Ein Zeiger auf eine Struktur, die Startcodeparameter enthält. Wenn Ihre Anwendung keine Parameter für den Startbefehl besitzt, ist dieser Wert NULL.
launchFlags Optionen, die Statusinformationen für Ihre Anwendung bereitstellen.
Ein Palm OS-Fehlercode. Der Code errNone zeigt Erfolg an.
Diese Methode beantwortet geräteabhängige oder Standard-Startcodes, die nicht als sysAppLaunchCmdNormalLaunch festgelegt sind.
Das folgende Beispiel für die Treo 6035 Smartphone-Implementierung verwendet PalmLsnSpecialLaunch für die Verarbeitung von Listener-Ereignissen:
Err PalmLsnSpecialLaunch( UInt16 cmd, MemPtr cmdPBP, UInt16 /*launchFlags*/ ) { switch(cmd) { case sysAppLaunchCmdSystemReset: // Fall through case sysAppLaunchCmdSyncNotify: // Fall through case phnLibLaunchCmdRegister: return registerListener(); case phnLibLaunchCmdEvent: { if (!IsFeatureOn(PalmLsnGetFeature(), Listening)) { return(errNone); } PhnEventPtr phoneEventP = (PhnEventPtr) cmdPBP; if (phoneEventP->eventType == phnEvtMessageInd) { return(handleMessage(phoneEventP->data.params.id, &phoneEventP->acknowledge)); } } default: break; } return(errNone); } |
Wenn eine Nachricht entdeckt wird, verarbeitet handleMessage die Nachricht mit der geeigneten Aktion.
static Err handleMessage( PhnDatabaseID id, Boolean * handled ) /*************************************************************/ // This routine will construct a_palm_msg and then call // PalmLsnProcess to process it. { a_palm_msg * ulMsg; Err ret; Boolean newlyLoaded; PhnAddressList addrList; PhnAddressHandle addrH; MemHandle msgBodyH; Char * msgSender; Char * msgBody; UInt32 msgTime; Char configDb[ dmDBNameLength ]; UInt16 libRef = 0; // CDMA workaround recommended by Handspring DmOpenRef openRef = 0; *handled = false; // Allocate a message structure for passing over // to PalmLsnProcess later ulMsg = PalmLsnAllocate(); if (ulMsg == NULL) { return(sysErrNoFreeRAM); } // Load the phone library ret = findOrLoadPhoneLibrary(&libRef, &newlyLoaded); if (ret != errNone) { goto done; } openRef = PhnLibGetDBRef(libRef); // Retrieve sender of the message ret = PhnLibGetAddresses(libRef, id, &addrList); if (ret != errNone) { goto done; } ret = PhnLibGetNth(libRef, addrList, 1, &addrH); if (ret != errNone) { PhnLibDisposeAddressList(libRef, addrList); goto done; } msgSender = PhnLibGetField(libRef, addrH, phnAddrFldPhone); if (msgSender != NULL) { ret = PalmLsnDupSender(ulMsg, msgSender); MemPtrFree(msgSender); } PhnLibDisposeAddressList( libRef, addrList ); if (ret != errNone) { goto done; } // Retrieve message time ret = PhnLibGetDate(libRef, id, &msgTime); if (ret != errNone) { goto done; } ret = PalmLsnDupTime(ulMsg, msgTime); if (ret != errNone) { goto done; } // Retrieve the entire message body ret = PhnLibGetText(libRef, id, &msgBodyH); if (ret != errNone) { goto done; } msgBody = (Char *) MemHandleLock(msgBodyH); ret = PalmLsnDupMessage(ulMsg, msgBody); // msgBodyH must be disposed of by the caller MemHandleUnlock(msgBodyH); MemHandleFree(msgBodyH); if (ret != errNone) { goto done; } // Get the configuration database name PalmLsnGetConfigFileName(configDb); // Call PalmLsnProcess to process the message ret = PalmLsnProcess(ulMsg, configDb, NULL, handled); done: if (ulMsg != NULL) { PalmLsnFree(ulMsg); } PhnLibReleaseDBRef(libRef, openRef); // Unload the phone library before any possible application switch if (newlyLoaded) { unloadPhoneLibrary(libRef); newlyLoaded = false; } return(ret); } |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |