首先要从sdk6.1中找到 profileengine.lib,分别在6.1的armi/urel和wins/udeb里,分别拷到2版的相应目录下,然后我的代码在wins下没有编过,在armi下过了,在6630和N72 上测试通过。。
头文件中加上这个
class CProfileAPI : public CBase
{
public:
enum TProErrorCode
{
EPro0=0
,EPro1
};
IMPORT_C static CProfileAPI* NewL(TBool);
IMPORT_C virtual ~CProfileAPI();
IMPORT_C TProErrorCode GetProfileActiveName(TPtr, TInt*);
IMPORT_C void SetProfileName(TInt);
};
代码如下:
enum TProfileState
{
EGeneral = 0,//标准
ESilent,//无声
EMeeting,//会议
EOutdoor,//户外
EPager,//寻呼机
EOffLine,//离线
EDrive//
};
CProfileAPI* iProfile = CProfileAPI::NewL(EFalse);
//取profileUid ,当前的模式
TInt profileUid=0;
HBufC* buf = HBufC::NewLC(32);
TPtr ptr = buf->Des();
if (iProfile->GetProfileActiveName(ptr, &profileUid)== KErrNone)
{
ptr.AppendNum(profileUid);
switch(profileUid)
{
case
EGeneral:
//使用 , 设置
iProfile->SetProfileName(ESilent);
break;
case ESilent:
iProfile->SetProfileName(EOffLine);
break;
//
case EMeeting:
// break;
//
case EOutdoor:
// break;
// case
EPager:
// break;
case EOffLine:
iProfile->SetProfileName(EGeneral);
break;
default:
break;
}
iEikonEnv->InfoMsg(_L("Open"));
CAknInformationNote* note
= new (ELeave) CAknInformationNote;
note->ExecuteLD(*buf);
}
CleanupStack::PopAndDestroy(buf);