.NET i takie tam

Telephony Library

leave a comment »

Większość obecnych urządzeń mobilnych z Windows Mobile na pokładzie (i nie tylko), posiada wbudowany telefon. A to otwiera ciekawe możliwości przed naszymi aplikacjami. Wszystko było by pięknie gdyby nie konieczność pracy z Telephony Application Programming Interface (w skrócie TAPI) biblioteką która umożliwia dostęp do tych wszystkich potencjalnie przydanych możliwości. Problemem jest stopień skomplikowania biblioteki, została ona napisana w C w roku bodaj 1993 i od tego czasu jedynie rozszerzana o nową funkcjonalność ew. przystosowywaną do nowych standardów. W efekcie operowanie na niej nie należy do przyjemności, no chyba, że ktoś ma skłonności lekko sadomasochistyczne.

Lepszym rozwiązaniem może być skorzystanie z komercyjnej biblioteki Telephony Library dostarczonej przez panów z OpenNetCF. Biblioteka ta jest wrapperem napisanym wokół TAPI i usuwa większość trudności na no bok. Przykładowo prosta klasa umożliwiająca nawiązywanie połączeń może wyglądać następująco:

using System;
using OpenNETCF.Telephony;

public class Phone : IDisposable
{
    private Telephony _tapi;
    private Line _line;
    private IAsyncResult _callResult;

    public event Call.CallStateHandler CallStateChanged;

    public static readonly Phone Instance = new Phone();

    public Phone()
    {
        Initialize();
    }

    private void Initialize()
    {
        _tapi = new Telephony();
        _tapi.Initialize();

        _line = _tapi.CreateLine(0, MediaMode.InteractiveVoice, 
                  CallPrivilege.Owner);

        if (_line == null)
        {
            return;
        }

        _line.NewCall += new Line.NewCallHandler(NewCall);
    }

    private void NewCall(Call call)
    {
        call.CallState += new Call.CallStateHandler(CallStateChanged);
    }

    public void Call(string phoneNumber)
    {
        if (_line == null)
        {
            return;
        }

        _callResult = _line.BeginMakeCall(phoneNumber, 
                        1, null, null, this);
    }

    public void EndCall()
    {
        if (_callResult == null)
        {
            return;
        }

        Call call = _line.EndMakeCall(_callResult);

        if (call != null)
        {
            call.Hangup();
            call.CallState -= new Call.CallStateHandler(CallStateChanged);
            call.Dispose();
            call = null;
        }
    }

    #region IDisposable Members

    public void Dispose()
    {
        if (_tapi != null)
        {
            _tapi.Shutdown();
            _tapi = null;
        }
    }

    #endregion
}

Written by sakowicz

Październik 20, 2008 @ 8:14 am

Napisane w .NET CF, Devices

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: