2016-07-02 24 views
0

У меня есть сканер Ciperlab под управлением Windows Mobile 6 и разработка с компактным фреймворком 3.5. Мне нужно сделать телефонный звонок, и когда вызов будет завершен, вернитесь в программу, где оператор завершает транзакцию. Я использовал функцию PhoneMakeCall в phone.dll, но в результате панели требуется несколько кнопок для нажатия. Идеальное решение - скрыть всю панель телефона. Решения от любого, кто сделал это раньше, были бы очень желанными. Я знаю, что технология устарела, но я застрял в ней, как и сканер.API для PocketPC Windows Mobile 6

ответ

1

Для осуществления телефонного звонка необходимо использовать API телефонии (TAPI). Это API, предоставляемый MS. Для создания телефонного звонка требуется много строк кода, и может быть проще использовать обертку, такую ​​как OpenNetCF Telephony Compact Framwork Classes. Here - пример. Примеры использования TAPI приведены на примере other.

Существует только незначительная информация о TAPI использование availabe от MS.

Некоторые производители устройств предлагают специальные телефонные SDK для поддержки устройств при доступе к телефону по коду. Например, Intermec WWAN Toolkit.

Я бы сначала пошел с openNetCF.

0

Спасибо за информацию josef. Это был большой

Первая ссылка ведет:

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

Это имеет ссылки на OpenNetCf но здесь Wrapper (OpenNETCF.Telephony.dll) была удалена. Существует еще одна ссылка на http://tapi.codeplex.com/, которая имеет исходный код для обертки и некоторые образцы. OpenNETCF.Telephony.dll включен в zip-файл для примеров, но для этой версии требуется лицензия, а также нет всех методов, используемых образцами. Я загрузил исходный код в zip и скомпилировал его. У этого есть некоторые проблемы, но работает хорошо.

У меня есть одна проблема. Чтобы сэкономить аккумулятор, я выключаю телефон. Он должен быть включен за 30 секунд до совершения вызова, иначе система попадет в необработанные панели телефона. Нет события статуса, информирующего о том, что сеть GSM стабилизировалась и может быть выполнен вызов. На данный момент я использую таймер, но это не чистое решение.

Я приложил мой окончательный код для справки:

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) 

 Смежные вопросы

  • Нет связанных вопросов^_^