情景模式及连接状态

本文介绍了在Symbian平台上检测手机飞行模式、离线模式和情景模式的方法,包括使用CRepository类进行中央仓库查询、监听配置变化以及通过Profiles Engine API获取当前配置文件等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


2010-01-08 10:37

How to know Flight mode status
From Forum Nokia Wiki
This is done using GetFlightMode() function from CTelephony class.
• Asynchronous call; so to cancel it use CTelephony::EGetFlightModeCancel
• Sometimes the phone’s software may not support this feature then the method returns KErrNotSupported.

Libraries needed:
LIBRARY Etel3rdParty.lib and euser.lib
Source:
class CClientApp : public CActive
{

private:
CTelephony* iTelephony;
CTelephony::TFlightModeV1 iFlightModeV1;
CTelephony::TFlightModeV1Pckg iFlightModeV1Pckg;

public:
CClientApp(CTelephony* aTelephony);
void FlightModeStatus();

private:
void RunL();
void DoCancel();
};

CClientApp:: CClientApp(CTelephony* aTelephony)
: CActive(EPriorityStandard),
iTelephony(aTelephony),
iFlightModeV1Pckg(iFlightModeV1)
{
//Constructor
}

void CClientApp::FlightModeStatus()
{
iTelephony->GetFlightMode(iStatus, iFlightModeV1Pckg);
SetActive();
}

void CClientApp::RunL()
{
if(iStatus==KErrNone)
{
CTelephony::TFlightModeStatus flightMode = iFlightModeV1.iFlightModeStatus;
if(flightMode == CTelephony::EFlightModeOff)
{} //If Flight mode status is off, all operations will be allowed
}
}

void CClientApp::DoCancel()
{
iTelephony->CancelAsync(CTelephony::EGetFlightModeCancel);
}
===============================================================
How to check if the phone is in offline mode

There's a CenRep key KCoreAppUIsNetworkConnectionAllowed that can be used for detecting off-line mode.
#include <CoreApplicationUIsSDKCRKeys.h>
To ask one time:
TInt aOfflineModeOff(0);
  CRepository* repository = CRepository::NewL(KCRUidCoreApplicationUIs);
  if (repository->Get(KCoreAppUIsNetworkConnectionAllowed, aOfflineModeOff) == KErrNone)
     {
     }
  delete repository;
You might want to order notifications about the changes:
 
    iRepository = CRepository::NewL(KCRUidCoreApplicationUIs);
    iCenRepNotifyHandler =
         CCenRepNotifyHandler::NewL(*this, *iRepository,
            CCenRepNotifyHandler::EIntKey, KCoreAppUIsNetworkConnectionAllowed);
    iCenRepNotifyHandler->StartListeningL();
 
void CThisClass::HandleNotifyInt(
    TUint32 aId,
    TInt aNewValue )
    {
    if (aId == KCoreAppUIsNetworkConnectionAllowed)
       {
       }
    }
 
S60 3rd, FP1
Another way to query the profile is to use the Profiles Engine Wrapper API:
#include <proengfactory.h>
#include <mproengengine.h>
MProEngEngine* engine = ProEngFactory::NewEngineLC();
TInt profileId = engine->ActiveProfileId();
if (profileId == 5) //offline
    {
    }
CleanupStack::PopAndDestroy(); //engine

=========================================================================================
How to Detect Offline Mode in 3rd Edition
Headers Required:
#include <centralrepository.h>
#include <ProfileEngineSDKCRKeys.h>
Library needed:
LIBRARY  centralrepository.lib
We need to Query Central Repository.
CRepository* cRepository = CRepository::NewLC( KCRUidProfileEngine );
TInt CurrentProfileId;
User::LeaveIfError( cRepository->Get( KProEngActiveProfile, CurrentProfileId ) );
if ( CurrentProfileId == 5 )
{
 
}
================================================================================
How to get notification of profile change
From Forum Nokia Wiki
Profiles Engine API, part of the Extension plug-in package for S60 3rd Edition, MR, provides a class CProfileChangeNotifyHandler using which we can get a notification for activation of a new profile and modifications of current active profile settings.
Header files
#include <CProfileChangeNotifyHandler.h>
#include <MProfileChangeObserver.h>
Libraries used
profileeng.lib
iHandler = CProfileChangeNotifyHandler::NewL( this );
void CNotifyEngine::HandleActiveProfileEventL(
              TProfileEvent aProfileEvent,
              TInt aProfileId )
    {
     TBuf<30> msg(_L("Current Profile Id : "));
     msg.AppendNum(aProfileId);
 
     switch(aProfileEvent)
      {
      case EProfileNewActiveProfile:
          {
          CEikonEnv::InfoWinL(_L("New Active Profile"),msg);
            break;
          }
      case EProfileActiveProfileModified:
          {
            break;
          }
      case EProfileUnknownEvent:
          {
            break;
          }      
      }
    }
Example project :
NotifyProfileChange_SampleCode
=================================================================
How to detect profile
This sample shows how to detect if the user has selected silent profile (in S60 3rd edition and in older models)
TBool CheckIfSilentMode()
{
#ifdef __SERIES60_3X__
 TBool inSilentMode=EFalse;
 
 CRepository* cr = CRepository::NewLC( KCRUidProfileEngine );
 TInt value;
   // Get the ID of the currently active profile:
      cr->Get( KProEngActiveProfile, value ) ;
      if(value==1||value==2)
  inSilentMode=ETrue;
 cr->Get( KProEngActiveRingingType, value );
 if(value==4) //silent
  inSilentMode=ETrue;
 CleanupStack::PopAndDestroy( cr );
 
#else
_LIT(KProfileDatabase,"c://system//Apps//profileApp//dbProfile.db");
_LIT(KProfileLookup,"ProfileLookup");
_LIT(KProfileStore,"ProfileStore");
 
      CPermanentFileStore* fstore =
        CPermanentFileStore::OpenLC(CEikonEnv::Static()->FsSession(),
        KProfileDatabase,EFileRead);   
 RDbStoreDatabase database;   
 database.OpenL(fstore,fstore->Root());
 RDbTable table; 
 
 table.Open(database, KProfileLookup);
 TBool foundactive = EFalse;
 TInt  prfindex=0;
 while (table.NextL() && !foundactive)
 {
  table.GetL();     
  if (!table.IsColNull(6) && (table.ColInt16(6) != 0) )
  {
   foundactive = ETrue;
   prfindex = table.ColInt16(1);
  }
 }
 table.Close();
 
 TBuf<20> tablestr;
 tablestr.Format(_L("PRF%d"),prfindex);
 table.Open(database,tablestr);
 
// first record, field 3 holds call alert
 table.FirstL();
 table.GetL();     
 TInt value;
 value =  table.ColInt16(3);
 inSilentMode = (value == 4);
 table.Close();
 
 database.Close();
 CleanupStack::PopAndDestroy(fstore);
#endif
      return inSilentMode;
}
=================================2nd上是可以用的 test ok=====================================
Handle Profile Activation
Library Needed:
LIBRARY        PlatformEnv.lib  //CSettingInfo
In Header File
#include <settinginfo.h> // CSettingInfo
#include <settinginfoids.h> // CSettingInfo ID's
 
 
class MyClass:public MSettingInfoObserver
{
void HandleNotificationL( SettingInfo::TSettingID aID,
const TDesC& aNewValue );
 
private:
 
CSettingInfo*    iSettings;
}
In the CPP File
CMyClass::ConstructL()
{
 iSettings = CSettingInfo::NewL(this);
 
 TInt err = iSettings->NotifyChanges(SettingInfo::EActiveProfile);
 if(err != KErrNone)
 {
 
 }
 
}
 
void CMyClass::HandleNotificationL(SettingInfo::TSettingID aID,
const TDesC& aNewValue )
{
 TInt err(0);
 switch(aID)
 {
 case SettingInfo::EActiveProfile:
  {
   TLex parsed(aNewValue);
   TInt value;
 
   if ( (err = parsed.Val(value)) == KErrNone )
   {
                            //Parsing successful
 
                           if(value==0)
                           //"General" Profile is Activated
                           if(value==1)
                           //"Silent" Profile is Activated
                          if(value==2)
                           //"meeting" Profile is Activated
                          if(value==3)
                           //"Outdoor" Profile is Activated
                          if(value==4)
                           //"Pager" Profile is Activated
                          if(value==5)
                           //"Offline" Profile is Activated
 
 
   }
   else
   {
    // parsing failed.....
 
   }
  break;
   }
 
 default:
  break;
 }
}
================================================

这个帖子
symbian 来电铃声及情景模式设置
http://www.devdiv.net/home/space.php?uid=11451&do=blog&id=78

main about using class of CRepository

 

内容概要:本文详细介绍了扫描单分子定位显微镜(scanSMLM)技术及其在三维超分辨体积成像中的应用。scanSMLM通过电调透镜(ETL)实现快速轴向扫描,结合4f检测系统将不同焦平面的荧光信号聚焦到固定成像面,从而实现快速、大视场的三维超分辨成像。文章不仅涵盖了系统硬件的设计与实现,还提供了详细的软件代码实现,包括ETL控制、3D样本模拟、体积扫描、单分子定位、3D重建和分子聚类分析等功能。此外,文章还比较了循环扫描与常规扫描模式,展示了前者在光漂白效应上的优势,并通过荧光珠校准、肌动蛋白丝、线粒体网络和流感A病毒血凝素(HA)蛋白聚类的三维成像实验,验证了系统的性能和应用潜力。最后,文章深入探讨了HA蛋白聚类与病毒感染的关系,模拟了24小时内HA聚类的动态变化,提供了从分子到细胞尺度的多尺度分析能力。 适合人群:具备生物学、物理学或工程学背景,对超分辨显微成像技术感兴趣的科研人员,尤其是从事细胞生物学、病毒学或光学成像研究的科学家和技术人员。 使用场景及目标:①理解和掌握scanSMLM技术的工作原理及其在三维超分辨成像中的应用;②学习如何通过Python代码实现完整的scanSMLM系统,包括硬件控制、图像采集、3D重建和数据分析;③应用于单分子水平研究细胞内结构和动态过程,如病毒入侵机制、蛋白质聚类等。 其他说明:本文提供的代码不仅实现了scanSMLM系统的完整工作流程,还涵盖了多种超分辨成像技术的模拟和比较,如STED、GSDIM等。此外,文章还强调了系统在硬件改动小、成像速度快等方面的优势,为研究人员提供了从理论到实践的全面指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值