Управление индикатором сигнала
Индикатор сигнала - один из элементов панели статуса, расположенный в левой части экрана. Этот индикатор может отображать восемь уровней сигнала, называемыхLevel 0, Level 1 и т.д. доLevel 7.
ВSymbian 2-й редакции, существует класс позволяющий пользователю контролировать состояние этого индикатора. Он находится в библиотекеaknnotify.lib и называетсяCAknSignalNotify.
Помимо прочего,CAknSignalNotify может быть использован для изменения состояний GPRS соединения.
CAknSignalNotify содержит следующие функции:
Примечание: реализация функций SetWcdmaStateL(), SetCdmaStateL() и SetCommonPacketDataStateL() может отсутствовать на GSM телефонах. В этом случае попытка обращения к ним приведет к завершению работы приложения без сообщения об ошибке.
#include <AknNotify.h>
class CAknSignalNotify : public CAknNotifyBase
{
public:
IMPORT_C static CAknSignalNotify* NewL();
IMPORT_C static CAknSignalNotify* NewLC();
IMPORT_C ~CAknSignalNotify();
IMPORT_C void SetGprsStateL(TInt aState);
IMPORT_C void SetSignalLevelL(TInt aLevel);
IMPORT_C void SetCommonPacketDataStateL(TInt aState);
IMPORT_C void SetWcdmaStateL(TInt aState);
IMPORT_C void SetCdmaStateL(TInt aState);
private:
CAknSignalNotify();
void ConstructL();
private:
IMPORT_C void CAknNotifyBase_Reserved();
};
Изменения индикатора, вызванные экземпляром класса CAknSignalNotify, сохраняются до тех пор, пока его состояние не изменит система, или другой экземпляр CAknSignalNotify. Поэтому, его можно удалить сразу после использования. К примеру: следующий код установит индикатор сигнала в максимальное состояние (Level 7). Не забудьте подключить библиотекуaknnotify.lib к вашему проекту.
CAknSignalNotify* AknSignalNotify= CAknSignalNotify::NewLC();
AknSignalNotify->SetSignalLevelL(7);
CleanupStack::PopAndDestroy();
Примечание: вы можете объявить перечисление для использования вSetBatteryLevelL():
enum TSignalLevel
{
ELevel0,
ELevel1,
ELevel2,
ELevel3,
ELevel4,
ELevel5,
ELevel6,
ELevel7
};
Аргумент функции SetGprsStateL() может принимать любое значение, но какой-либо эффект на индикатор оказывают следующие:
Здесь вы можете скачать демонстрационным пример.
Индикатор заряда батареи - один из элементов панели статуса, расположенный в правой части экрана. Этот индикатор может отображать восемь уровней заряда батареи, называемыхLevel 0, Level 1 и т.д. доLevel 7. Во время подзарядки батареи с помощью зарядного устройства, индикатор постоянно меняется, пробегая все значения от разряженного до полностью заряженного. Индикатор может принимать восемь различных состояний.
ВSymbian 2-й редакции, существует класс позволяющий пользователю контролировать состояние этого индикатора. Он также находится в библиотекеaknnotify.lib и называетсяCAknBatteryNotify.
CAknBatteryNotify содержит следующие функции:
#include <AknNotify.h>
class CAknBatteryNotify : public CAknNotifyBase
{
public:
IMPORT_C static CAknBatteryNotify* NewL();
IMPORT_C static CAknBatteryNotify* NewLC();
IMPORT_C ~CAknBatteryNotify();
IMPORT_C void NotChargingL();
IMPORT_C void SetBatteryLevelL(TInt aLevel);
IMPORT_C void StartChargingL();
IMPORT_C void StopChargingL();
private:
CAknBatteryNotify();
void ConstructL();
private:
IMPORT_C void CAknNotifyBase_Reserved();
};
Изменения индикатора, вызванные экземпляром класса CAknBatteryNotify, сохраняются до тех пор, пока его состояние не изменит система, или другой экземпляр CAknBatteryNotify. Поэтому, его можно удалить сразу после использования. К примеру: следующий код установит индикатор в полностью заряженное состояние (Level 7). Не забудьте подключить библиотекуaknnotify.lib к вашему проекту.
CAknBatteryNotify* AknBatteryNotify = CAknBatteryNotify::NewLC();
AknBatteryNotify->SetBatteryLevelL( 7 );
CleanupStack::PopAndDestroy();
Примечание: вы можете объявить перечисление для использования в SetBatteryLevelL():
enum TBatteryLevel
{
ELevel0,
ELevel1,
ELevel2,
ELevel3,
ELevel4,
ELevel5,
ELevel6,
ELevel7
};
Здесь вы можете скачать демонстрационным пример.
Индикатор вызова - иконка (иногда мерцающая, см. рис.), появляющаяся в правом верхнем углу экрана в том случае, если телефон не может отобразить полноценное окно вызова.
Во 2-й редакцииSymbian вы можете отобразить или скрыть этот индикатор, не зависимо от того, имеется ли входящий звонок или нет. Для этого вы должны воспользоваться классомCAknIncallBubble изaknnotify.lib. Заголовок для этого класса в SDK не включен, но используемое им перечисление TAvkonIncallStatusBubbleFlags доступно в avkon.hrh, а сам класс по структуре очень прост и полностью соответствуетCAknPopupNotify, так что воссоздать его заголовочный файл не составляет большого труда.
// INCLUDES
#include <e32std.h>
#include <e32base.h>
#include <AknNotify.h>
/* CAknIncallBubble flags
* Bit Explanation
* 0 and 1 Call state
* 2 No Ciphering
* 3 Is muted
* 4 Is Visible
* 5 Is a Fax
* 6 Is a Data call
* 7 Is a Hscsd data call
* 8 Line 2 indication
* 9 Is a Video call
* 10 Is an emergency call
*/
/* Следующее перечисление можно найти в avkon.hrh:
enum TAvkonIncallStatusBubbleFlags
{
EAknStatusBubbleAlerting = 0x00, // One of
EAknStatusBubbleActive = 0x01, // these
EAknStatusBubbleOnHold = 0x02, // to set
EAknStatusBubbleDisconnected = 0x03, // the call state
EAknStatusBubbleNoCiphering = 0x04,
EAknStatusBubbleMuted = 0x08,
EAknStatusBubbleVisible = 0x10,
EAknStatusBubbleFax = 0x20,
EAknStatusBubbleData = 0x40,
EAknStatusBubbleDataHscsd = 0x80,
EAknStatusBubbleLine2 = 0x100,
EAknStatusBubbleVideo = 0x200,
EAknStatusBubbleEmergency = 0x400
};
*/
// CLASS DECLARATION
/**
* CAknIncallBubble
*
*/
class CAknIncallBubble : public CBase
{
public:// Constructors and destructor
IMPORT_C static CAknIncallBubble* NewL();
IMPORT_C static CAknIncallBubble* NewLC();
IMPORT_C ~CAknIncallBubble();
IMPORT_C void SetIncallBubbleFlagsL(int aMessage);
private:
CAknIncallBubble();
void ConstructL();
IMPORT_C void CAknNotifyBase_Reserved();
};
Подключите AknIncallBubble.h к своему проекту, и используйте следующий код:
CAknIncallBubble* IncallBubble = CAknIncallBubble::NewLC();
IncallBubble->->SetIncallBubbleFlagsL(EAknStatusBubbleVisible | EAknStatusBubbleAlerting);
CleanupStack::PopAndDestroy(IncallBubble);
Здесь находится демонстрационный проект, позволяющий поэксперементировать с различными флагами CAknIncallBubble.
Автор:TR"]F