您的位置:首页 > 其它

[转贴]如何让手机识别自定义的文件类型

2008-07-14 14:31 323 查看
MDL是一个库文件,存在c:/system/recogs 目录下(模拟器上没有这个目录可以到手机上找到),用作S60平台中的文件类型识别,下面代码出自SDK help:
/***********************************************************/
/* */
/* 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: