# رویدادهای تماس

بعد از initialize کردن تماس رویدادهای مربوط به تماس را از طریق پیاده سازی CallEventListener می توانید دریافت کنید :

public class CallActivity extends Activity implements CallEventListener {

    @Override
    public void onMediaStateChanged(MediaStateChangedEvent event) {
        // Show caller & receptor media state
    }


    @Override
    public void onCallFinished(CallFinishedReason reason) {
        // When Call state changed to finished, this method called with reason of finish
    }

    @Override
    public void onCallStateChanged(CallState state,boolean isLocalChange) {
        // isLocalChange : Show's the change is made by you or your contact
        runOnUiThread(() -> {
            switch (state) {
                case TRYING: {
                     // Server is trying to find receptor
                    break;
                }
                case RINGING: {
                    // Call is ringing
                    break;
                }
                case CONVERSATION: {
                    // Conversation started
                    break;
                }
                case PAUSED: {
                    // Conversation paused
                    break;
                }
                case FINISHED: {
                    // Call is finished
                    break;
                }
            }
        });
    }

}

نکات

  • در صورتی که شما این تغییر را به وجود آورده باشید متغیر isLocalChange مقدار true خواهد داشت.

  • برای مشاهده دلایل اتمام تماس به صفحه دلایل اتمام تماس مراجعه نمایید.

  • برای مشاهده وضعیت های تماس به صفحه وضعیت تماس مراجعه نمایید.


در هر کدام از حالت های تماس احتمال قطع تماس وجود دارد که بعد از قطع شدن تماس توسط هر ۲ طرف اول متد onCallStateChanged با وضعیت FINISHED اجرا می شود و سپس متد onCallFinished به همراه دلیل قطع تماس (reason) اجرا خواهد شد. برای مثال :

# مثال ۱

ممکن است Caller اقدام به برقراری تماس کند ولی Receptor به دلیل عدم اتصال به اینترنت یا سرور امکان اتصال به تماس را نداشته باشد شرایط به شکل زیر خواهد بود :

  • در آغاز متد onCallStateChanged با وضعیت TRYING فراخوانی خواهد شد.
  • بعد از چند دقیقه در صورتی که مخاطب به تماس متصل نشود سرور تماس را پایان می دهد و متد onCallStateChanged با وضعیت FINISHED فراخوانی خواهد شد.
  • سپس متد onCallFinished به همراه دلیل اتمام تماس (reason) اجرا خواهد شد.

# مثال ۲

Caller اقدام به برقراری تماس می کند Receptor تماس را دریافت کرده و به تماس ملحق شده و شروع به زنگ خوردن می کند.

Receptor بعد از چند دقیقه هیچ واکنشی به تماس نشان نمی دهد. (یعنی تماس را نه قبول و نه رد می کند) در اینصورت شرایط به شکل زیر خواهد بود :

  • وضعیت تماس برای Caller در آغاز به TRYING تغییر خواهد کرد.
  • زمانی که Receptor پیام Push Notification را دریافت می کند و به تماس ملحق می شود و سپس وضعیت RINGING را برای تماس به سرور ارسال می کند و شروع به زنگ خورد می کند.
  • سرور وضعیت تماس را به RINGING تغییر می دهد و به Caller ارسال می کند.
  • Receptor هیچ واکنشی به تماس نشان نمی دهد و بعد از چند دقیقه سرور وضعیت تماس را به FINISHED تغییر می دهد. و سپس متد onCallStateChanged با وضعیت FINISHED اجرا خواهد شد.
  • سپس متد onCallFinished در هر ۲ طرف اجرا می شود و دلیل تماس MISSED خواهد بود.