Jak wykryć nadchodzące połączenie?

  • 9 Odpowiedzi
  • 997 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline deyot

  • *
  • 69
  • Sprzęt: Samsung i5700
Jak wykryć nadchodzące połączenie?
« dnia: Sierpień 13, 2007, 22:28:54 »
Witam.
Piszę program dla MDA Compact i potrzebuję, żeby program reagował na nadchodzące połączenie. Od dłuższego czasu bawię się z TAPI ale nic mi jak dotychczas nie wychodzi. Ma ktoś może jakieś doświadczenie w tej materii i mógłby rzucić jakiś pomysł?
Piszę w VC2005 w kodzie natywnym.

*

Offline MastaKrK

  • *
  • 52
  • Płeć: Mężczyzna
  • Sprzęt: VPA Compact II
Odp: Jak wykryć nadchodzące połączenie?
« Odpowiedź #1 dnia: Sierpień 24, 2007, 20:08:54 »
nie wiem o co dokladnie chodzi ale w moim pda zapalaja sie klawisze wszystkie i ekranik 5 sekund przed uslyszeniem dzwonka i obrazkiem ktory pokazuje osobe dzwoniaca

*

Offline deyot

  • *
  • 69
  • Sprzęt: Samsung i5700
Odp: Jak wykryć nadchodzące połączenie?
« Odpowiedź #2 dnia: Sierpień 27, 2007, 22:17:37 »
Dzięki za odpowiedź. Chodziło mi o to jak programowo rozpoznać nadchodzące połączenie. Już sobie poradziłem. Mniej - więcej.

*

Offline mustela

  • 47
  • Płeć: Mężczyzna
Odp: Jak wykryć nadchodzące połączenie?
« Odpowiedź #3 dnia: Sierpień 28, 2007, 08:42:19 »
Jesli udalo sie Tobie, to podziel sie swoja wiedza.
Moze komus przydac sie to w przyszlosci.
Jesli szczegoly chcesz zachowac dla siebie to podaj chociaz jakas wskazowke.

Pozdrawiam.

*

Offline deyot

  • *
  • 69
  • Sprzęt: Samsung i5700
Odp: Jak wykryć nadchodzące połączenie?
« Odpowiedź #4 dnia: Sierpień 28, 2007, 13:05:44 »
No cóż nie jest to jakoś szczególnie trudne. Z drugiej strony sporo wysiłku kosztowało mnie znalezienie potrzebnych informacji, a i różne osoby na różnych forach dyskusyjnych też nie są zbyt skore do pomocy.
Ale do rzeczy.
Piszę w kodzie natywnym, więc wskazówki będą dotyczyć gołego API w C. Nie mam w tej chwili dostępu do kodu źródłowego. Piszę z pamięci.
Kolejka czynności wygląda mniej więcej następująco:
Inicjujemy TAPI używając funkcji lineInitializeEx(). Nie było w moim przypadku konieczne uzgadnianie wersji API i ExtAPI (funkcje Negotiate coś tam... już nie pamiętam). Podobno jednak dobrze jest uzgodnić wersję ExtAPI. lineInitializeEx() już uzgadnia wersję API. Ta funkcja daje też informację o liczbie urządzeń w systemie. Dzięki temu wiemy ile razy wywołać lineGetDevCaps(). Ta funkcja pozwoli znaleźć komórkę w naszym komputerku. Teraz iterujemy lineGetDevCaps() tak długo aż znajdziemy komórkę. Rozpoznajemy ją w taki sposób: do lineGetDevCaps() przekazuje się strukturę (nie pamiętam nazwy - poszukajcie w msdn), która później wypełniana jest specyfikacją danego urządzenia. Szukamy urządzenia, które pod offsetem wskazywanym bodaj przed pole .dwDeviceName (nazwy zmiennej nie jestem pewien) zawiera napis "Cellular Line". Następnie wywołujemy funkcję lineOpen() i już kontrolujemy telefon. Trzeba tylko dobrze ustawić flagi konfiguracyjne w parametrach do lineOpen() . Jak mam coś z "DATAMODEM" i "VOICE coś tam". Jak zerknę w kod to napiszę co konkretnie. Potem w najprostszym rozwiązaniu wystarczy w kółko wywoływać lineGetMessage(), które będzie przekazywać informację o wszystkich zdarzeniach związanych z telefonem. LINE_APPNEWCALL to nowe połączenie na przykład. Można też używać mechanizmu eventów ale tego jeszcze do końca nie rozszyfrowałem (dostaję zdarzenie jak ktoś do mnie dzwoni ale nie jak ja do kogoś dzwonię). Jakby ktoś zechciał mi pomóc to będę wdzięczny.

*

Offline mustela

  • 47
  • Płeć: Mężczyzna
Odp: Jak wykryć nadchodzące połączenie?
« Odpowiedź #5 dnia: Sierpień 28, 2007, 13:20:14 »
Dzieki  :ok:

Calkiem zrozumiale opisales mimo ze z glowa czyli z niczego (jak mawial moj prof. Matematyki).

Powodzenia w dalszej walce...

event'y nie sa takie straszne. trzeba sie tylko pod odpowiedni podwiesic.
Niestety nie mam praktyki w twoim temacie.

Eventy to ja sam definiuje i zglaszam a w innej aplikacji je przechwytuje.

 :ok:

*

Offline deyot

  • *
  • 69
  • Sprzęt: Samsung i5700
Odp: Jak wykryć nadchodzące połączenie?
« Odpowiedź #6 dnia: Sierpień 28, 2007, 13:57:51 »
Zasadniczo wywołując lineInitializeEx() wybierasz sobie jak chcesz być powiadamiany o zdarzeniach związanych z danym urządzeniem. Z tego co się orientuję są dwie metody. Procedurka, której adres przekazujesz do lineInitializeEx() i która jest wywoływana jako procedura obsługi okna (ukrytego, tworzonego przez system). Tej metody nie badałem i nie jestem pewien jak działa (i czy w ogóle ją dobrze opisałem). Oraz przez mechanizm eventów. W tym drugim przypadku lineInitializeEx() przekazuje ci uchwyt do eventa. Problem w tym, że event nie zawsze mi się odpala. Z tego co mi się wydaje należy jakoś powiadomić system w jakich przypadkach ma go uruchamiać. Szczegółów niestety nie znam. Jak by ktoś wiedział, to niech powiem. Byłoby fajnie. Bo samemu przekopywać się przez msdn i próbowanie kupy różnych #definów, których nazwy w większości nic nie mówią jest co najmniej nużące.

*

Offline kartam

  • ***
  • 285
  • Płeć: Mężczyzna
  • Master of Pocket PC & Smartphone ;]
    • MediaDrain (w budowie ;))
  • Sprzęt: HTC TyTN II
Odp: Jak wykryć nadchodzące połączenie?
« Odpowiedź #7 dnia: Sierpień 28, 2007, 16:19:44 »
dajcie spokój ! A nie lepeij przez rejestr? W podkluczu State (nie pamiętam gdzie dokładnie) jest o tym informacja

*

Offline deyot

  • *
  • 69
  • Sprzęt: Samsung i5700
Odp: Jak wykryć nadchodzące połączenie?
« Odpowiedź #8 dnia: Sierpień 31, 2007, 08:27:15 »
witam.
A mógłbyś może podać bardziej konkretne informacje? Monitorowałem niektóre klucze (i podklucze) o nazwie state, a właściwie takie jakie mi się kojarzyły, i nie zauważyłem żeby jakikolwiek zmieniał swoją wartość w momencie wykonywania połączenia.
Jeśli byś sobie przypomniał o jaki konkretnie wpis w rejestrze chodzi, to byłbym wdzięczny.

*

Offline kartam

  • ***
  • 285
  • Płeć: Mężczyzna
  • Master of Pocket PC & Smartphone ;]
    • MediaDrain (w budowie ;))
  • Sprzęt: HTC TyTN II
Odp: Jak wykryć nadchodzące połączenie?
« Odpowiedź #9 dnia: Sierpień 31, 2007, 18:33:46 »
witam.
A mógłbyś może podać bardziej konkretne informacje? Monitorowałem niektóre klucze (i podklucze) o nazwie state, a właściwie takie jakie mi się kojarzyły, i nie zauważyłem żeby jakikolwiek zmieniał swoją wartość w momencie wykonywania połączenia.
Jeśli byś sobie przypomniał o jaki konkretnie wpis w rejestrze chodzi, to byłbym wdzięczny.
postaram się, ale na 80% było coś takiego. właśnie w State