/***********************************************************/ /* */ /* MyRecognizer.mmp */ /* */ /***********************************************************/ TARGET MyRecognizer.MDL TARGETTYPE MDL UID 0x10003A19 0x100530 TARGETPATH /system/recogs/ SOURCEPATH ../src SOURCE MyRecocnizer.cpp USERINCLUDE ../inc SYSTEMINCLUDE /epoc32/include LIBRARY EUSER.LIB LIBRARY APMIME.LIB /***********************************************************/ /* */ /* MyRecognizer.h */ /* */ /***********************************************************/ // includes #include <apmrec.h> // For CApaDataRecognizerType // Mime type string and the extension _LIT8( KMyMimeType, "application/vnd.mymime" ); _LIT( KDotMymime,".mym" ); // File header to look for from the data _LIT8( KMyMimeHeader, "#!MY" ); // TUid of the recognizer const TUid KUidMyMimeRecognizer( { 0x100530 } ); class CMyRecognizer : public CApaDataRecognizerType { public: // from CApaDataRecognizerType CMyRecognizer(); virtual TUint PreferredBufSize(); virtual TDataType SupportedDataTypeL( TInt aIndex ) const; private: // from CApaDataRecognizerType virtual void DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer ); // New funtions private: // Check the file name extension TBool NameRecognized( const TDesC& aName ); // Look into the data TBool HeaderRecognized( const TDesC8& aName ); }; // End of file /***********************************************************/ /* */ /* MyRecognizer.cpp */ /* */ /***********************************************************/ // Includes #include "MyRecognizer.h" // // Constructor // MyRecognizer::MyRecognizer() :CApaDataRecognizerType( KUidMyMimeRecognizer, CApaDataRecognizerType::EHigh ) { iCountDataTypes = 1; } // // Preferred buffer size. // TUint MyRecognizer::PreferredBufSize() { return 128; } // // For the framework for collecting the supported mime types list. TDataType MyRecognizer::SupportedDataTypeL( TInt aIndex ) const { switch( aIndex ) { case 0: default: return TDataType( KMyMimeType ); break; } } // // The framework calls this function for recognition // void MyRecognizer::DoRecognizeL( const TDesC& aName, const TDesC8& aBuffer ) { TBool nameOk( EFalse ); TBool headerOk( EFalse ); iConfidence = ENotRecognized; if ( aBuffer.Length() < 10 ) return; // First try the name, then the data. nameOk = NameRecognized( aName ); headerOk = HeaderRecognized( aBuffer ); if ( nameOk && headerOk ) { iConfidence = ECertain; } else if ( !nameOk && headerOk ) { iConfidence = EProbable; } else if ( nameOk && !headerOk ) { iConfidence = EPossible; } else return; iDataType = TDataType( KMyMimeType ); } // // Check if the file header can be recognized // TBool MyRecognizer::HeaderRecognized( const TDesC8& aBuffer ) { if ( aBuffer.Find( KMyMimeHeader ) ) return ETrue; else return EFalse; } // // Check if the file name has ".mym" extension // TBool MyRecognizer::NameRecognized( const TDesC& aName ) { TBool ret = EFalse; if ( aName.Length() > 5 ) { TInt dotPos = aName.LocateReverse( '.' ); if (dotPos != KErrNotFound) { TInt extLength = aName.Length() - dotPos; HBufC* ext = aName.Right( extLength ).AllocL(); CleanupStack::PushL( ext ); if ( ext->CompareF( KMyMimeHeader ) == 0 ) { ret = ETrue; } CleanupStack::PopAndDestroy(); // ext } } return ret; } // // The gate function - ordinal 1 EXPORT_C CApaDataRecognizerType* CreateRecognizer() { CApaDataRecognizerType* thing = new MyRecognizer(); return thing; // NULL if new failed } // // DLL entry point // GLDEF_C TInt E32Dll(TDllReason /*aReason*/) { return KErrNone; } // End of file |
[转贴]如何让手机识别自定义的文件类型
最新推荐文章于 2023-02-15 18:20:16 发布