Пока единственное что нашел, чтобы вызвать номер -
Но на S^1 - если в запросе на звонок сказать - нет. Открывается браузер.Code:QDesktopServices::openUrl(QUrl("tel:+777777777777"));
Нет ли другого решения?
Пока единственное что нашел, чтобы вызвать номер -
Но на S^1 - если в запросе на звонок сказать - нет. Открывается браузер.Code:QDesktopServices::openUrl(QUrl("tel:+777777777777"));
Нет ли другого решения?
Без Qt не пойдёт?
Code:void CallL(const TDesC& aNumber) { CTelephony* tel = CTelephony::NewLC(); CTelephony::TTelNumber number(aNumber); TRequestStatus status; CTelephony::TCallId callid; CTelephony::TCallParamsV1 callparams; CTelephony::TCallParamsV1Pckg callparamspckg(callparams); callparams.iIdRestrict = CTelephony::ESendMyId; tel->DialNewCall(status,callparamspckg,number,callid); User::WaitForRequest(status); CleanupStack::PopAndDestroy(tel); }
Пока были актуальны Qt Mobile Extension позвонить можно было через класс XQTelephony:
Но сейчас от этих расширений отказались в пользу Qt Mobility, в котором подобный функционал отсутствует.Code:#include <XQTelephony> ... ... XQTelephony* telephony = new XQTelephony(this); telephony->call("+9190000000000");
Так что лучшим выходом будет смешать Qt код с Symbian C++ и совершать вызов через CTelephony.
Заделал звонилку( Переделал класс из wiki) только вот проблема. После запуска звонилки приложение обратно не открывается. Не могу разобраться в чем проблема?
Code:#ifndef MAKECALL_H #define MAKECALL_H #include <Etel3rdParty.h> // link to etel3rdparty.lib class MDialObserver { public: virtual void CallDialedL(TInt aError) = 0; }; class CCallDialer : public CActive { public: static CCallDialer* NewL(MDialObserver& aCallBack); static CCallDialer* NewLC(MDialObserver& aCallBack); ~CCallDialer(); protected: CCallDialer(MDialObserver& aObserver); void ConstructL(); private: void RunL(); void DoCancel(); private: MDialObserver& iObserver; CTelephony* iTelephony; CTelephony::TCallId iCallId; CTelephony::TCallParamsV1 iCallParams; CTelephony::TCallParamsV1Pckg iCallParamsPckg; }; #endif // MAKECALL_HВызов:Code:#include "MakeCall.h" #include <QString> CCallDialer* CCallDialer::NewL(MDialObserver& aCallBack) { CCallDialer* self = CCallDialer::NewLC(aCallBack); CleanupStack::Pop(self); return self; } CCallDialer* CCallDialer::NewLC(MDialObserver& aCallBack) { CCallDialer* self = new (ELeave) CCallDialer(aCallBack); CleanupStack::PushL(self); self->ConstructL(); return self; } CCallDialer::~CCallDialer() { Cancel(); delete iTelephony; } void CCallDialer::ConstructL() { iTelephony = CTelephony::NewL(); QString text = "+77777777777"; TBuf<100> buffer(text.utf16()); CTelephony::TTelNumber telNumber(buffer); iCallParams.iIdRestrict = CTelephony::ESendMyId; iTelephony->DialNewCall(iStatus, iCallParamsPckg, telNumber, iCallId); SetActive(); } CCallDialer::CCallDialer(MDialObserver& aObserver) : CActive(EPriorityNormal),iObserver(aObserver), iCallParamsPckg(iCallParams) { CActiveScheduler::Add(this); } void CCallDialer::RunL() { iObserver.CallDialedL(iStatus.Int()); } void CCallDialer::DoCancel() { iTelephony->CancelAsync(CTelephony::EDialNewCallCancel); }
Code:iCallDialer = CCallDialer::NewL(*this); void MenuForm::CallDialedL(TInt aError) { delete iCallDialer, iCallDialer = NULL; this->setFocus(); this->raise(); }
Last edited by ivan.belousov; 2011-06-27 at 11:32.
Попробуйте добавить вызов this->raise(); после setFocus();
Всем доброго времени суток! Пишу приложение под Symbian 9.4 на Qt, также возникла необходимость совершать звонки, вариант с "openUrl" никак не устраивает. Подскажите пожалйста, как можно это реализовать?
Пробывал использовать класс представленный ivan.belousov, но возникает ошибка в строке
Нет ли более простого метода?Code:iCallDialer = CCallDialer::NewL(*this);
Более простого способа нет.
А какая ошибка возникает?
Я добавил этот класс (CCallDialer), при нажатии на кнопку формы происходит следующее:
Возникает ошибка: no matching function for call to 'CCallDialer::NewL(MainWindow&)'Code:CCallDialer CalDial = CCallDialer::NewL(*this);
То что в CCallDIaler нет метода "NewL(MainWindow&)" я понял. Вобщем проблема в том, что я чет не соображу как теперь этот класс использовать.
Попробывал с использованием CTelephony, подкинул библиотеку, написал код:
Добавил Capability, вобщем скомпилировался, все нармально, запустил на 5800 - в приложении нажимаю на кнопку вызова и приложение тутже закрывается, и больше ничего не происходит....Code:CTelephony* tel = CTelephony::NewLC(); CTelephony::TTelNumber number(aNumber); TRequestStatus status; CTelephony::TCallId callid; CTelephony::TCallParamsV1 callparams; CTelephony::TCallParamsV1Pckg callparamspckg(callparams); callparams.iIdRestrict = CTelephony::ESendMyId; tel->DialNewCall(status,callparamspckg,number,callid); User::WaitForRequest(status); CleanupStack::PopAndDestroy(tel);
Last edited by Bitaxa; 2012-01-29 at 11:41. Reason: Добавил новый код
1) Воспользуйтесь лучше примером от ivan.belousov,отнаследуйте ваш класс MainWindow от MDialObserver, и реализуйте его виртуальные функции.
2) Для отображения ошибок приложений создайте файлик C:/resource/ErrRd
3) Есть дебаггинг же
SQR, огромное Вам спасибо! первый пункт из вашего сообщения очень помог, лепил всё что угодно, а наследоваться от от MDialObserver както и не подумал, туплю=))