http://wiki.forum.nokia.com/index.php/%E5%A6%82%E4 %BD%95%E6%9B%B4%E6%8D%A2%E5%BD%93%E5%89%8D%E4%B8%BB %E9%A2%98
如何更换当前主题
From Forum Nokia Wiki
* 设备, 软件 版本:
S60 3rd Edition
* 详细描述:
[edit] 描述
S60第三版SDK并未提供给第三方程序一个方法来更换主题。但我们可以在
Extensions plug-in package for S60 3rd Edition SDK 获取到我们需要的API.
[edit] 解决方案
如何更换主题:
1、连接Skin Server
#include // link against aknskinsrv.lib
RAknsSrvSession skinsSession;
User::LeaveIfError( skinsSession.Connect( this ) );
CleanupClosePushL( skinsSession );
2、获取当前skin的package ID
#include // link against centralrepository.lib
#include
void CMyThemeManager::StoreCurrentSkinIdL()
{
TAknsPkgIDBuf pidBuf;
CRepository* repository = CRepository::NewL(KCRUidPersonalisation );
TInt retVal = repository->Get( KPslnActiveSkinUid, pidBuf );
delete repository;
repository = NULL;
iOriginalSkinPid.SetFromDesL( pidBuf ); // iOriginalSkinPid is of type TAknsPkgID
}
3、获得已安装skin packages列表
CArrayPtr* skinInfoArray =
skinsSession.EnumerateSkinPackagesL();
CleanupStack::PushL( skinInfoArray );
4、查询已安装的主题,确认第一个有效新主题
TInt retValue( KErrNone );
if ( skinInfoArray->Count() > 0 )
{
for ( TInt i = 0; i Count(); i++ )
{
TAknsPkgID pkgId = skinInfoArray->At( i )->PID();
if ( pkgId != iOriginalSkinPid )
{
// Activates a complete skin package
retValue = skinsSession.SetAllDefinitionSets( pkgId );
if ( retValue == KErrNone )
{
SetNewSkinIdL( pkgId );
}
break;
}
}
}
5、在Central Repository中存储新主题id
void CMyThemeManager::SetNewSkinIdL( TAknsPkgID aPkgId )
{
TAknsPkgIDBuf pidBuf;
aPkgId.CopyToDes( pidBuf );
CRepository* repository = CRepository::NewL( KCRUidPersonalisation );
TInt retVal = repository->Set( KPslnActiveSkinUid, pidBuf );
// KPslnActiveSkinLocation value needs to be updated
// if the new skin resides on memory card and the
// previous one resided in phone memory (and vice versa)
delete repository;
repository = NULL;
}
如何更换当前主题
From Forum Nokia Wiki
* 设备, 软件 版本:
S60 3rd Edition
* 详细描述:
[edit] 描述
S60第三版SDK并未提供给第三方程序一个方法来更换主题。但我们可以在
Extensions plug-in package for S60 3rd Edition SDK 获取到我们需要的API.
[edit] 解决方案
如何更换主题:
1、连接Skin Server
#include // link against aknskinsrv.lib
RAknsSrvSession skinsSession;
User::LeaveIfError( skinsSession.Connect( this ) );
CleanupClosePushL( skinsSession );
2、获取当前skin的package ID
#include // link against centralrepository.lib
#include
void CMyThemeManager::StoreCurrentSkinIdL()
{
TAknsPkgIDBuf pidBuf;
CRepository* repository = CRepository::NewL(KCRUidPersonalisation );
TInt retVal = repository->Get( KPslnActiveSkinUid, pidBuf );
delete repository;
repository = NULL;
iOriginalSkinPid.SetFromDesL( pidBuf ); // iOriginalSkinPid is of type TAknsPkgID
}
3、获得已安装skin packages列表
CArrayPtr* skinInfoArray =
skinsSession.EnumerateSkinPackagesL();
CleanupStack::PushL( skinInfoArray );
4、查询已安装的主题,确认第一个有效新主题
TInt retValue( KErrNone );
if ( skinInfoArray->Count() > 0 )
{
for ( TInt i = 0; i Count(); i++ )
{
TAknsPkgID pkgId = skinInfoArray->At( i )->PID();
if ( pkgId != iOriginalSkinPid )
{
// Activates a complete skin package
retValue = skinsSession.SetAllDefinitionSets( pkgId );
if ( retValue == KErrNone )
{
SetNewSkinIdL( pkgId );
}
break;
}
}
}
5、在Central Repository中存储新主题id
void CMyThemeManager::SetNewSkinIdL( TAknsPkgID aPkgId )
{
TAknsPkgIDBuf pidBuf;
aPkgId.CopyToDes( pidBuf );
CRepository* repository = CRepository::NewL( KCRUidPersonalisation );
TInt retVal = repository->Set( KPslnActiveSkinUid, pidBuf );
// KPslnActiveSkinLocation value needs to be updated
// if the new skin resides on memory card and the
// previous one resided in phone memory (and vice versa)
delete repository;
repository = NULL;
}