`
hgfghww
  • 浏览: 40691 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Symbian 更换主题

阅读更多

  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;
  }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics