Как показать предупреждающее сообщение для пользователя, когда щелкает или касается панели поиска по умолчанию Mediacontroller с videoview?
Я реализовал VideoView с Mediacontroller, как показано ниже.
MediaController mediacontroller = new MediaController(VideoViewActivity.this);
mediacontroller.setAnchorView(mVideoView);
mVideoView.setMediaController(mediacontroller);
Теперь я хочу показать оповещение, когда пользователь нажимает на панель поиска. Я попытался с помощью следующего кода, добавив onclickListener
искать панель, но не работает.
int topContainerId = getResources().getIdentifier("mediacontroller_progress", "id", "android");
SeekBar seekbar = (SeekBar) mediacontroller.findViewById(topContainerId);
seekbar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(TAG, "WE HAVE LIFT OFF");
showAlertMesage();
}
});
Но событие не запускается, поэтому предупреждающее сообщение с опциями " ОК " и " Отмена " не отображается.
Также реализация должна показывать предупреждение, когда пользователь нажимает / касается панели поиска. Панель поиска не должна быть доступной до тех пор, пока пользователь не нажмет "ОК".
Если пользователь нажимает "Отмена", воспроизведение видео и поиск позиции не должны быть изменены. если щелкнуть "ОК", он должен быть доступен для этой позиции.
Так что будьте добры, поделитесь или предложите, как реализовать это поведение, заранее всем спасибо.
2 ответа
Ваш подход правильный. Но вам нужно сделать это после того, как ваше видео подготовлено. Используйте OnPreparedListener
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mVideoView.start();
int topContainerId = getResources().getIdentifier("mediacontroller_progress", "id", "android");
SeekBar seekbar = (SeekBar) mediacontroller.findViewById(topContainerId);
seekbar.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i(TAG, "WE HAVE LIFT OFF");
if(seekAllowed){ //declare seekAllowed as false globally
return false;
}
webView1.pause();
showAlertMesage();
return true;
}
});
}
});
Диалог:
private void showAlertMesage() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
seekAllowed = true;
webView1.resume();
}
});
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
webView1.resume();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
Вам нужно использовать onSeekChangeListener
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(mMediaPlayer != null && fromUser){
Log.i(TAG, "WE HAVE LIFT OFF");
showAlertMesage();
}
}
});