2016-07-02 7 views
0

Ich habe einen Ciperlab-Scanner, der Windows Mobile 6 ausführt und mit Compact Framework 3.5 entwickelt. Ich muss einen Anruf tätigen und nach Abschluss des Anrufs zu dem Programm zurückkehren, in dem der Bediener die Transaktion abschließt. Ich habe die Funktion PhoneMakeCall in der phone.dll verwendet, aber das resultierende Panel erfordert eine Anzahl von Tasten, die gedrückt werden müssen. Die perfekte Lösung wäre, das gesamte Telefonfenster zu verstecken. Lösungen von allen, die dies bereits getan haben, wären sehr willkommen. Ich weiß, dass die Technologie alt ist, aber ich bin davon abhängig, wie es mit dem Scanner kommt.API zu PocketPC Windows Mobile 6

Antwort

1

Um einen Anruf zu tätigen, muss die Telefonie-API (TAPI) verwendet werden. Dies ist eine API, die von MS bereitgestellt wird. Das Tätigen eines Anrufs erfordert viele Codezeilen und es ist möglicherweise einfacher, einen Wrapper wie OpenNetCF Telephony Compact Framwork Classes zu verwenden. Here ist ein Beispiel. Es gibt other Beispiele für die Verwendung von TAPI.

Es gibt nur wenige Informationen über TAPI Verwendung verfügbar von MS.

Einige Gerätehersteller bieten spezielle Phone SDKs an, die den Zugriff von Geräten auf das Telefon über Code unterstützen. Zum Beispiel das Intermec WWAN Toolkit.

Ich würde zuerst mit openNetCF gehen.

0

Danke für info josef. Es war toll,

Der erste Link führt Sie zu:

http://programmaremobile.blogspot.co.za/2009/10/how-to-make-call-with-opennetcf-tapi.html

Dies hat Links zu OpenNETCF aber hier ist die Wrapper (OpenNETCF.Telephony.dll) entfernt wurde. Es gibt einen weiteren Link zu http://tapi.codeplex.com/, der den Quellcode für den Wrapper und einige Beispiele enthält. Die OpenNETCF.Telephony.dll ist in der ZIP-Datei für die Beispiele enthalten, aber diese Version benötigt eine Lizenz und verfügt nicht über alle Methoden, die von den Beispielen verwendet werden. Ich habe den komprimierten Quellcode heruntergeladen und kompiliert. Es hat einige Probleme, funktioniert aber gut.

Ich habe ein ausstehendes Problem. Um Batterie zu sparen, schalte ich das Telefon aus. Es muss 30 Sekunden vor dem Anruf eingeschaltet werden, andernfalls wird das System in die Raw-Panels des Telefons verschoben. Es gibt kein Statusereignis, das darüber informiert, dass sich das GSM-Netzwerk stabilisiert hat und ein Anruf getätigt werden kann. Im Moment benutze ich einen Timer, aber das ist keine saubere Lösung.

Ich habe meinen letzten Code als Referenz beigefügt:

In Declarations 
Imports OpenNETCF.Telephony 
Friend WithEvents tapi As Telephony 
Friend WithEvents CellLine As Line 
Friend WithEvents CellCall As [Call] 
Public CellPhoneCoverage As Boolean = False 
Shared CellCallState As Integer = 1 

Private Function CreateCellLine() As Boolean 
Dim i As Integer 
Dim dc As DeviceCapabilities 
'Open Tapi 
Try 
    tapi = New Telephony 
    tapi.Initialize() 
    If tapi.NumberOfDevices > 0 Then 
    Try 
     For i = 0 To tapi.NumberOfDevices - 1 
     tapi.GetDeviceCapabilities(i, dc) 
     If (dc.MediaModes And MediaMode.InteractiveVoice) = _ 
       MediaMode.InteractiveVoice Then 
      'found the cellular line 
      CellLine = tapi.CreateLine(i, dc.MediaModes, _ 
       CallPrivilege.None)          
      'To save battery turn off phone. 
      'Note that it must be turned on for 30 seconds 
      ' before making a call otherwise we drop into the 
      ' phone raw panels 
      NativeMethods.lineSetEquipmentState(CellLine.hLine, _ 
         EquipmentState.Minimum) 
      CreateCellLine = True 

      'if battery is not an issue then check phone state 
      'Dim es As EquipmentState 
      'Dim rs As RadioState 
      'NativeMethods.lineGetEquipmentState(CellLine.hLine, es, rs) 
      'CreateCellLine = (es = EquipmentState.Full And rs = RadioState.On) 
      Exit Function 
     End If 
     Next 
     MsgBox("cell line not found") 
     CreateCellLine = False 
    Catch ex As Exception 
     CreateCellLine = False 
      MsgBox("CreateCellLine(1):" & ex.Message) 
    End Try 
    End If 
Catch ex As Exception 
    CreateCellLine = False 
    MsgBox("CreateCellLine(2):" & ex.Message) 
End Try 
End Function 

Handle events: 
Private Sub CellCall_CallState(ByVal [call] As OpenNETCF.Telephony.Call, _ 
      ByVal state As OpenNETCF.Telephony.CallState) _ 
      Handles CellCall.CallState 
'Note that this state change is not called for disconencted and connected events 
    MsgBox("Call state is " & state.ToString()) 
End Sub 

Private Sub CellCall_Connected(ByVal [call] As OpenNETCF.Telephony.Call, _ 
      ByVal state As OpenNETCF.Telephony.CallState) _ 
      Handles CellCall.Connected 
    MsgBox("Connected") 
End Sub 

Private Sub CellCall_Disconnected(ByVal [call] As OpenNETCF.Telephony.Call, _ 
      ByVal state As OpenNETCF.Telephony.CallState) _ 
      ByVal disconnectMode As OpenNETCF.Telephony.DisconnectMode) _ 
      Handles CellCall.Disconnected 
    MsgBox("Disconnected") 
End Sub 

In the form_load procedure: 
    'Open Tapi and check we have cell phone coverage 
    CellPhoneCoverage = CreateCellLine() 

To make a call: 
    'If the phone if off then it must be turned on for 30 seconds 
    ' before making a call otherwise we drop into the phone raw panels 

    Dim rc As Integer 
    Dim es As EquipmentState 
    Dim rs As RadioState 
    NativeMethods.lineGetEquipmentState(CellLine.hLine, es, rs) 
    If Not (es = EquipmentState.Full) Then 
    rc = NativeMethods.lineSetEquipmentState(CellLine.hLine, EquipmentState.Full) 
    Else 
    If (es = EquipmentState.Full And rs = RadioState.On) Then 
     CellCall = CellLine.MakeCall("0812500163", 27, False) 
    End If 
    End If 

To end a call: 
    CellCall.Hangup() 
    If Not ((CellCallState = OpenNETCF.Telephony.CallState.Idle) Or _ 
      (CellCallState = OpenNETCF.Telephony.CallState.Disconnected)) Then 
    'must do check otherwise get a null exception 
    Try 
     CellCall.Hangup() 
     Catch ex As Exception 
     MsgBox("CellCall.Hangup: " & ex.Message) 
    End Try 
    End If 

    'if battery is not an issue then leave phone on 
    ' remember when making a call allow time for the network to connect 
    ' otherwise we drop into the phone raw panels 
    NativeMethods.lineSetEquipmentState(CellLine.hLine, _ 
       EquipmentState.Minimum) 
Verwandte Themen