2010-11-29 35 views
0

我需要在播放铃声时振动手机。在netcf C中播放铃声时振动#

这是我的代码:

public static bool PlaySound(string soundName) 
    { 
     try 
     { 
      WMPLib.WindowsMediaPlayer player = new WMPLib.WindowsMediaPlayer(); 
      string MediaFile = Assembly.GetExecutingAssembly().GetName().CodeBase.Substring(0, Assembly.GetExecutingAssembly().GetName().CodeBase.LastIndexOf("\\")) + "\\Resources\\" + soundName; 
      player.URL = MediaFile; 
      WindowsMediaPlayerClass wmp = new WindowsMediaPlayerClass(); 

      player.settings.volume = 100; 
      player.controls.play(); 
      SetVibrate(true); 
      System.Threading.Thread.Sleep((int)wmp.newMedia(MediaFile).duration*1000 + 100); 
      SetVibrate(false); 
      return true; 
     } 
     catch 
     { 
      return false; 
     } 
    } 

我的问题是,手机FIRST震动,然后播放声音..是不是不可能性振动的声音的持续时间?

谢谢。

@ x86shadow:我试图与线程,但不工作:(

public static bool PlaySound(string soundName) 
    { 
     try 
     { 
      // 29/11/2010 Luca - Aggiungo vibrazione durante il suono del messaggio. 
      WMPLib.WindowsMediaPlayer player = new WMPLib.WindowsMediaPlayer(); 

      string MediaFile = Assembly.GetExecutingAssembly().GetName().CodeBase.Substring(0, Assembly.GetExecutingAssembly().GetName().CodeBase.LastIndexOf("\\")) + "\\Resources\\" + soundName; 
      player.URL = MediaFile; 
      WindowsMediaPlayerClass wmp = new WindowsMediaPlayerClass(); 

      player.settings.volume = 100; 
      RingDuration = (int) wmp.newMedia(MediaFile).duration*1000 + 100; 

      VibrateWhilePlayingThread = new Thread(VibrateWhilePlaying); 


      VibrateWhilePlayingThread.Start(); 

      player.controls.play(); 

      VibrateWhilePlayingThread.Join(); 

      return true; 
     } 
     catch 
     { 
      return false; 
     } 
    } 

    private static int RingDuration; 

    public static Thread VibrateWhilePlayingThread; 

    public static void VibrateWhilePlaying() 
    { 
     SetVibrate(true); 
     System.Threading.Thread.Sleep(RingDuration); 
     SetVibrate(false); 

    } 
+0

你可能想使用两个线程来做到这一点,一个用于振动,一个用于播放声音。 – fardjad 2010-11-29 14:41:24

+0

@ x86shadow:你能给我一个例子吗? – Leen15 2010-11-29 14:48:50

回答

1

添加一个事件处理程序:

Player.PlayStateChanged += new AxWMPLib._WMPOCXEvents_PlayChangeEventHandler(player_PlayStateChange); 

尝试创建一个事件:

private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e) 
    { 
     if (Player.playState == WMPLib.WMPPlayState.wmppsPlaying) 
     { 
      SetVibrate(true); 
     } 
     else 
     { 
      SetVibrate(false); 
     } 
    }