如何更换当前主题

  设备, 软件 版本:
S60 3rd Edition

  详细描述:
描述
S60第三版SDK并未提供给第三方程序一个方法来更换主题。但我们可以在
Extensions plug-in package for S60 3rd Edition SDK 获取到我们需要的API.

解决方案
如何更换主题:
1、连接Skin Server
#include <AknSSrvClient.h> // link against aknskinsrv.lib
 
    RAknsSrvSession skinsSession;
 
    User::LeaveIfError( skinsSession.Connect( this ) );
 
    CleanupClosePushL( skinsSession );

2、获取当前skin的package ID
#include <centralrepository.h> // link against centralrepository.lib
 
 #include <AknSkinsInternalCRKeys.h>   
 
    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<CAknsSrvSkinInformationPkg>* skinInfoArray =
 
                skinsSession.EnumerateSkinPackagesL();
 
CleanupStack::PushL( skinInfoArray );

4、查询已安装的主题,确认第一个有效新主题
TInt retValue( KErrNone );
 
    if ( skinInfoArray->Count() > 0 )
 
        {
 
        for ( TInt i = 0; i < skinInfoArray->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;
 
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值