Discussion Board

Results 1 to 10 of 10
  1. #1
    Regular Contributor stasy1905's Avatar
    Join Date
    Mar 2010
    Posts
    57
    Здравствуйте, перепробовала все способы как получить уровень заряда батареи(хотя бы!, лучше в процентах), но ничего не получается(либо выдается просто 0(если пытаюсь использовать метод как приведен в примерах кода для получения имея(синхронно)),а если использую здесь приведенный пример мониторинга заряда, то эмулятор(и приложение на телефоне) сразу закрываются, не сообщая ни о какой ошибке...Покажите, пожалуйста, как правильно использовать функции получения заряда батареи...

  2. #2
    Nokia Developer Moderator truf's Avatar
    Join Date
    Jun 2007
    Location
    Moscow, Russia
    Posts
    1,355
    Покажите код, ссылки на используемые примеры. Воспользуйтесь отладчиком.

  3. #3
    Regular Contributor stasy1905's Avatar
    Join Date
    Mar 2010
    Posts
    57
    http://wiki.forum.nokia.com/index.ph...8E_CTelephony- это русско язычная версия, там же ссылка на англ.вариант, использовала в своем классе так:

    TUint level, CTelephony::TBatteryStatus stat
    CBatteryCheck* bat=CBatteryCheck::NewLC(*aOb);
    aOb->BatteryLevelL(level, stat)

    Выходит с паникой Kernel Exec 3...

    Второй вариант, выдает все время значение 0...
    bat1i.cpp
    #include "bat1i.h"

    void CBAT::GetBAT(TUint perc)
    {
    CBAT* self= new (ELeave) CBAT(perc);
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::PopAndDestroy(self);
    }

    void CBAT::ConstructL()
    {
    iTelephony = CTelephony::NewL();
    CActiveScheduler::Add(this);
    CTelephony::TBatteryInfoV1Pckg PckB(iBatInf);
    iTelephony->GetBatteryInfo(iStatus, PckB);
    SetActive();
    CActiveScheduler::Start();
    }

    CBAT:: CBAT(TUint PERC): CActive(EPriorityStandard),perc(PERC)
    {
    //конструктор по-умолчанию
    }

    CBAT::~CBAT()
    {
    delete iTelephony;
    iTelephony = NULL;
    }

    void CBAT::RunL()
    {
    if(iStatus==KErrNone)
    {
    perc=iBatInf.iChargeLevel;
    CActiveScheduler::Stop();
    }
    }

    void CBAT:oCancel()
    {
    iTelephony->CancelAsync(CTelephony::EBatteryInfoChangeCancel);
    }

    bat1i.h
    #include <e32base.h>
    #include <Etel3rdParty.h>
    class CBAT : public CActive
    {

    private:
    void ConstructL();
    CTelephony* iTelephony;
    CTelephony::TBatteryInfoV1 iBatInf;



    public:
    CBAT(TUint perc);
    ~CBAT();
    static void GetBAT(TUint perc);
    TUint perc;

    private:
    /*
    Далее следуют виртуальные методы класса CActive,
    которые ДОЛЖНЫ быть реализованы всеми активными объектами
    */
    void RunL();
    void DoCancel();
    };

    Помогите, пожалуйста, у меня уже просто руки опускаются...

  4. #4
    Nokia Developer Moderator truf's Avatar
    Join Date
    Jun 2007
    Location
    Moscow, Russia
    Posts
    1,355
    В первом случае мне сложно сказать, почему вы решили что вы можете ТАК использовать этот класс.
    Во втором случае, если вы хотите получить результат через аргумент функции - передавайте его в нее по ссылке, а не по значению.

  5. #5
    Nokia Developer Champion Den123's Avatar
    Join Date
    Jul 2007
    Location
    Magnitogorsk, Russia
    Posts
    536
    Вам нужно разобраться как работать с активными объектами - без них в Symbian C++ никак. В русской wiki есть необходимые статьи.

  6. #6
    Regular Contributor stasy1905's Avatar
    Join Date
    Mar 2010
    Posts
    57
    Спасибо большое за чрезвычайно содержательные ответы!Но дело в том, что я бы не писала здесь если бы не прочитала все что нашла и все равно не разобралась...с другими активными объектами не возникает проблем...
    Last edited by stasy1905; 2010-04-24 at 09:08.

  7. #7
    Nokia Developer Champion Den123's Avatar
    Join Date
    Jul 2007
    Location
    Magnitogorsk, Russia
    Posts
    536
    Извините, конечно, но то, как Вы используете CBatteryCheck (первый вариант) говорит о том, что Вы не до конца разобрались что и как.

    Например, почему Вы сами вызываете метод aOb->BatteryLevelL(level, stat) ? Этот метод автоматически вызывается в CBatteryCheck :: RunL() после выполнения асинхронного запроса.

  8. #8
    Regular Contributor stasy1905's Avatar
    Join Date
    Mar 2010
    Posts
    57
    Если честно, я сама не понимаю зачем здесь это, но где я читала этот пример в описании было так написано....Если все члены класса private, то как тогда получить данные?

    P.S. я не утверждаю что я со всем разобралась, а прошу помощи объяснить что я не понимаю....
    Last edited by stasy1905; 2010-04-24 at 18:31.

  9. #9
    Nokia Developer Champion Den123's Avatar
    Join Date
    Jul 2007
    Location
    Magnitogorsk, Russia
    Posts
    536
    Сделайте так:

    1. Отнаследуйте ваш AppUi в том числе и от оMBatteryObserver - это потребует реализовать в AppUi метод:
    Code:
    void BatteryLevelL(TUint aChargeStatus, CTelephony::TBatteryStatus aStatus)
    именно этот метод будет автоматически вызываться при изменении заряда или статуса зарядки. Используйте, например, CAknInformationNote для вывода значения полученных параметров.

    2. Добавьте в качестве члена класса AppUi:
    Code:
    CBatteryCheck* iBatteryChecker;
    3. В ConstructL() вашего AppUi добавьте:
    Code:
    iBatteryChecker = new (ELeave) CBatteryCheck( *this );
    iBatteryChecker->ConstructL();
    4. В деструкторе AppUi не забудьте удалить iBatteryChecker

  10. #10
    Regular Contributor stasy1905's Avatar
    Join Date
    Mar 2010
    Posts
    57
    Огромное спасибо!!!!

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Nokia Developer aims to help you create apps and publish them so you can connect with users around the world.

京ICP备05048969号  © Copyright Nokia 2013 All rights reserved