locked
如何 限制PDA拨出的电话 RRS feed

  • 问题

  • 在Mobile 中如何限制PDA拨出电话?

    如何做到只能拨打某些电话?

    环境:WM6  
    2009年11月9日 9:10

答案

全部回复

  • 好多应用中都是需要屏蔽某些来电,楼主的帖子是要限制拨出的电话。
    不知道是否可以这样来做,判断PhoneMakeCall函数中的PCWSTR pszDestAddress参数是否是某些可以拨打的电话。
    施炯
    2009年11月9日 13:30
  • 你可以试一下用SNAPI去监视是否有电话拨出, 就像下面代码那样

    SystemState phoneCallContactState = new SystemState(SystemProperty.PhoneCallCalling);

    一旦有电话拨出,检查一下电话号码,如果是需要限制的,可以挂断电话,可以用发一个VK_END键用keybd_event,


    具体可以看一下:
    http://social.msdn.microsoft.com/forums/en-US/vssmartdevicesvbcs/thread/87acbcf5-0cc9-4039-af92-b3ffc7c98e7f/


    Please remember to mark the replies as answers if they help and unmark them if they provide no help
    2009年11月12日 8:28
  • 我看到同事好像用底层的电话操作的API可以解决,具体的API我还没看到,等我看到了贴上来跟大家分享吧
    2009年11月16日 8:59
  •      public    static void Init()
            {
                IntPtr hRil = IntPtr.Zero;
                IntPtr hRes = IntPtr.Zero;

                hRes = RIL_Initialize(1,                                        // RIL port 1
                                      new RILRESULTCALLBACK(rilResultCallback), // 返回调用结果的回调函数
                                      new RILNOTIFYCALLBACK(rilNotifyCallback), RIL_NCLASS_ALL, 0,
                                      out m_hRil);                                //返回RIL实例的handle 

                if (hRes != IntPtr.Zero)
                {

                }


                CMD_IMSI = RIL_GetUserIdentity(m_hRil);
                if ((CMD_IMSI).ToInt32() < 0)
                {
                    RIL_Deinitialize(m_hRil);

                }
                waithandle.WaitOne();




            }


         private static AutoResetEvent waithandle = new AutoResetEvent(false);

            private  static void rilResultCallback(uint dwCode,
                                                 IntPtr hrCmdID,
                                                 IntPtr lpData,
                                                 uint cbData,
                                                 uint dwParam)
            {
                if (dwCode == RIL_RESULT_OK)
                {
                    if (hrCmdID == CMD_IMSI)
                    {
                        // 取得IMSI号
                        OnResultGetIMSI(lpData, cbData);
                    }
                    else if (hrCmdID == CMD_OUTCALL)
                    {
                        // 打出电话处理
                        OnResultOutCall(lpData, cbData);
                    }

                }
            }


     private static void OnResultOutCall(IntPtr lpData, uint cbData)
            {
                RILCALLINFO rpi = new RILCALLINFO();
                Marshal.PtrToStructure(lpData, rpi);
                if (rpi.dwDirection == RIL_CALLDIR_OUTGOING)
                    if (!Validate(rpi.wszAddress1, LimitType.Out))
                    {
                        // 挂断电话
                        RIL_Hangup(m_hRil);
                    }
            }


      private static void rilNotifyCallback(uint dwCode,
                                                   IntPtr lpData,
                                                   uint cbData,
                                                   uint dwParam)
            {
                switch (dwCode)
                {
                    case RIL_NOTIFY_CONNECT: // 呼出电话通知
                        {
                            CMD_OUTCALL = RIL_GetCallList(m_hRil);
                            break;
                        }
                    case RIL_NOTIFY_CALLERID:   //呼入电话通知
                        {
                            RILREMOTEPARTYINFO rpi = new RILREMOTEPARTYINFO();
                            Marshal.PtrToStructure(lpData, rpi);
                            if (!Validate(rpi.wszAddress1 , LimitType.In ))
                            {
                                // 挂断电话
                                RIL_Hangup(m_hRil);
                            }
                            break;
                        }
                    default:
                        break;
                }

            }

    2009年11月27日 3:33