注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Simon

 
 
 

日志

 
 

系统应用精品汇总-系统属性设置  

2010-12-19 15:31:12|  分类: Symbian C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
情景模式介绍
所谓情景模式就是根据不同的环境设置不同的模式,一般分为标准、家庭、会议、户外、寻呼机等,用户可以在手机的情景模式之间切换,每个情景模式中都包含不同的振铃音量,振铃音类型。针对不同环境设置不同的情景模式。例如,您可能需要创建一个静音模式、会议模式(适合正式场合的振铃音)和户外模式(适合于嘈杂的室外环境)。在每个情景模式中都可以为话音呼入和信息告警等设置各种铃声。根据不同的情况来设置情景模式,效果也会不同。虽然用户手机上已经有了这么丰富的功能,很多时候很多用户仍然不知道或者不会用。如果我们能带领引导用户去设置精美的铃声那是不是更能添加用户的粘度呢?哈哈!!让我们今天来揭露一下这层神秘的面纱吧。
设置铃声
有了上文的相关介绍,我们突然发现设置铃声,或者说是设置情境模式有些时候是一个非常不错的需求。那么我们应该如何设置铃声呢?其实细心的朋友会发现我们可以通过修改情景模式来定制属于自己的铃声。那么我们试想是不是修改了情景模式的铃声选项就能修改铃声了呢?我们带着如此美好的憧憬去试试吧。
本文属于进阶篇,以下的探讨假定您已经有了一定的基础。所以有很多细节我们会在这里不做很详细的描述。
只要是提起修改手机上的相关设置,我们都要提到“陈子腾大神”的潘多拉魔盒,也叫子腾大法。我们来看看子腾大法的核心类CRepository。此类不属于Public SDK需要去下载插件。因为此类非常重要,尤其是在以后的开发中经常会遇到。在这里我来看看他到底是啥东东,为以后打好一个基础。我们来看看SDK里的一段解释。There are potentially 2^32 repositories, each identified by a UID. Within each repository up to 2^32 settings can be stored. Settings within a repository are identified by a 32-bit key and may be of the types integer, real or descriptor.大致的意思是说,我们可以通过这个类再结合对应的ID值来设置修改相应的属性值,保存值的类型有整数,浮点数,描述符。
即然这样,我们就可以猜想到如果我们能找到情影模式的UID。然后修改UID里的相应的铃声选项的值就OK了。好让我们看如何实现的。
备注:当系统没有给我们提供对应的API去修改相应的选项的时候,往往通过子腾大法可以收到奇效。
void CSoundManage::SetSound(const TDesC& aBuf)
{
//参数代表声音的绝对路径
const TUid KUidSound ={0x101f8798};//情景模式的UID
//根据UID初始化
CRepository* repository = CRepository::NewL(KUidSound);
//标准模式
repository->Set(0x0000004,aBuf);
repository->Set(0x0000005,aBuf);

//无声模式
// repository->Set(0x1000004,aBuf);
// repository->Set(0x1000005,aBuf);

// //会议模式
// repository->Set(0x2000004,aBuf);
// repository->Set(0x2000005,aBuf);

// //户外模式
// repository->Set(0x3000004,aBuf);
// repository->Set(0x3000005,aBuf);

// //寻呼机模式
// repository->Set(0x4000004,aBuf);
// repository->Set(0x4000005,aBuf);

// //离线模式
// repository->Set(0x5000004,aBuf);
// repository->Set(0x5000005,aBuf);

delete repository;
repository = NULL;

//激活情景模式。
MProfileEngine* profileEngine = CreateProfileEngineL();
CleanupReleasePushL( *profileEngine );
profileEngine->SetActiveProfileL(0);
CleanupStack::PopAndDestroy();
}

设置墙纸
设置墙纸也是我们经常要用到的技巧之一,尤其是现在的手机基本都内置了摄相头。如果用户任意拍摄了美丽的外景后,想将此图片设置为桌而背景是不是更赞一个呢!好让我们来看看如何设置墙纸吧。
设置墙纸是个非常简单的事情,因为系统提供了API。由于系统提供了专有的API我们就不在这里详细讨论关于设置桌面背景的原理了。只是在这里简单带过一下,详细的过程大家可以下载开源的OS代码进行研究吧。大家只要认真研究一下主题,就会发现桌面背景这张图片是可以替换的。这里封装的API只是对主题操作的一次再封装而己。我们不做过多的讨论了。看了下面的代码你会更吃惊。



void CImageManage::SetImage(const TDesC& aImagePath)
{
//设置回默认图片
// AknsWallpaperUtils::SetIdleWallpaper(KNullDesC, iCoeEnv);
AknsWallpaperUtils::SetIdleWallpaper(aImagePath, iCoeEnv);
}

设置屏保
让我们来看看如何设置屏保。屏保的设置稍稍有点麻烦,我们需要做一个屏保的Plugin。本文只作简单的讨论屏保的设置,相关的知识不在这里讨论。以下所有的讨论都是假定您己经有了一定的基础。
平台给我们提供了一个MScreensaverPlugin类用于屏保的设置,我们只需要继承这个Plugin后,重载相关的方法即可以实现屏保。用户安装完屏保SIS后,屏保不能立即启动。用户进入手机上的节电保护模式设置,会看到自己的屏保插件程序。选中自己的屏保程序。屏保程序被激活。
//屏保被激活使用,会自动回调这里初始化相关参数。
TInt CScreensaverPlugin::InitializeL(MScreensaverPluginHost* aHost)
{
iHost = aHost;
//设置屏保屏新时间间隔
iHost->SetRefreshTimerValue();
//设置刷新模式
iHost->OverrideStandardIndicators();
//设置播放区域大小
iHost->SetActiveDisplayArea();
return KErrNone;
}

//根据用户设置的屏保时间,当屏保时间到达后,自动回调画屏。整个函数的实现就很简单了,完全就是画图的相关操作。画图的相关操作请您参考我们之前面的章节。
TInt CScreensaverPlugin::Draw(CWindowGc& aGc)
{
aGc.DrawLine();
return KErrNone;
}
//屏保的例子在附件中补上,您如果需要开发自己的屏保程序,只需要在现有的模版上做适当的修改即可以完成屏保的开发。
  评论这张
 
阅读(521)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018