2015-03-13 1 views
0

Я воспроизвожу видео и пытаюсь приостановить его при удалении гарнитуры. Но, к сожалению, есть временная задержка около 1-2 секунд, после чего музыка/видео останавливается. Тот же кусок кода отлично работает, когда я использую его для музыкального проигрывателя, но не для видеопроигрывателя. Может ли кто-нибудь помочь?Задержка при паузе видео на удалении гарнитуры

активность:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
// Register headset receiver 
    registerReceiver(headsetReceiver, 
      new IntentFilter(Intent.ACTION_HEADSET_PLUG));} 


// If headset gets unplugged, stop music and service. 
private final BroadcastReceiver headsetReceiver = new BroadcastReceiver() { 
    private boolean headsetConnected = false; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     // Log.v("TAG", "ACTION_HEADSET_PLUG Intent received"); 
     if (intent.hasExtra("state")) { 
      if (headsetConnected && intent.getIntExtra("state", 0) == 0) { 
       headsetConnected = false; 
       headsetSwitch = 0; 

      } else if (!headsetConnected 
        && intent.getIntExtra("state", 0) == 1) { 
       headsetConnected = true; 
       headsetSwitch = 1; 

      } 

     } 

     switch (headsetSwitch) { 
      case (0): 
       headsetDisconnected(); 
       break; 
      case (1): 
       break; 
      default: 
       break; 
     } 
    } 

}; 

private void headsetDisconnected() { 
    if(videoInterface!=null) 
     videoInterface.stopVideo(); 

} 

Фрагмент:

public class VideoPlayerFragment extends Fragment implements VideoInterface 
{ 
@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    ((VideoPlayer)getActivity()).videoInterface = this; 
} 
@Override 
public void stopVideo() { // interface method 
    if (mediaPlayer != null && mediaPlayer.isPlaying()) 
     mediaPlayer.pause(); 
} 

ответ

0

Вы всегда можете перемотать видео;

int currTime = mediaplayer.getcurrentposition(); 
    int newTime = currTime - 3000; // 3k milliseconds 
    mediaplayer.seekTo(newTime); 
+0

Зачем перематывать назад, когда мне просто нужно сделать паузу? Там должно быть лучшее решение. – RisingUp

+0

Это может быть просто медленное время отклика (отставание). Я не мог думать ни о чем другом. – n1ckname152

+0

Его не только о времени в одиночку. Если пользователь удаляет гарнитуру, музыка должна немедленно прекратиться. Ваше решение не остановит музыку от игры. – RisingUp

0

Решил использовать этот код. Ссылка: http://developer.android.com/training/managing-audio/audio-output.html

IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY); 

    registerReceiver(headsetReceiver, intentFilter); 

// If headset gets unplugged, stop music and service. 
private final BroadcastReceiver headsetReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) { 
      // Pause the playback 
      headsetDisconnected(); 
     } 

     } 

}; 

private void headsetDisconnected() { 
    if(videoInterface!=null) 
     videoInterface.stopVideo(); 

}