У меня есть приложение android
, которое загружает контент с сайта https.Это происходит в моем FullImageActivity
, который получает мой контент (изображения и видео), и я вижу, что мой контент отображается на экране как thumbnails .Когда я нажимаю на изображения и / или видео, это приводит меня к FullImageFragment
.Я использую последний Glide 4.9.0
для отображения моего контента в полном размере (что работает, кстати).
Однако, когда я играю видео, оно работает, но оно воспроизводит каждое видео только один раз!Это происходит, когда я нажимаю на стрелку назад, чтобы вернуться к миниатюрам, а затем нажимаю на видео, чтобы воспроизвести его снова, и оно не будет воспроизводиться!
Это то, что я получаю в своем журнале консоли, когда нажимаю на кнопку «Назад» телефона:
W/MediaPlayer: mediaplayer went away with unhandled events
mediaplayer went away with unhandled events
Вот как я загружаю свои изображения и видео в мой FullImageFragment :
import ...
public class FullImageFragment
extends Fragment {
//region members variables
private SelectedItem mCurrentItem = null; //The selected item
private VideoView mVideoView;
private MediaController mediaController;
private TextView mLoadingView;
private ImageButton mPlayButton;
private void FullImageFragment()
{
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
if (getArguments() != null)
mCurrentItem = (SelectedItem) getArguments().getSerializable(AP_ITEM_ARG);
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.switcherimage, container, false);
// region Initialize global views
this.mImage = rootView.findViewById(R.id.switchimageview);
this.mVideoView = rootView.findViewById(R.id.switcherWebView);
this.mLoadingView = rootView.findViewById(R.id.loading_view);
this.mPlayButton = rootView.findViewById(R.id.play_button);
//endregion
mLoadingView.setVisibility(View.GONE);
Glide.with(rootView.getContext())
.asBitmap()
.load(FooData.getPreUrl(getActivity()) + mCurrentItem.getmWebSize())
.into(new BitmapImageViewTarget(mImage) {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
super.onResourceReady(resource, transition);
mImage.setImageBitmap(resource);
mImage.setZoom(1);
}
});
if (mCurrentItem.getmDownloadLink().endsWith(".mp4")) {
//region play video function
mPlayButton.setVisibility(View.VISIBLE);
mPlayButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setVideoPlayerView();
}
});
}
else
{
mVideoView.setVisibility(View.INVISIBLE);
mLoadingView.setVisibility(View.GONE);
mPlayButton.setVisibility(View.GONE);
}
return rootView;
}
}
private void setVideoPlayerView() {
int SDK_INT = android.os.Build.VERSION.SDK_INT;
if (SDK_INT > 8) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
}
this.mPlayButton.setVisibility(View.GONE);
mLoadingView.setVisibility(View.VISIBLE);
mImage.setVisibility(View.GONE);
mVideoView.setVisibility(View.VISIBLE);
mVideoView.requestFocus();
mVideoView.bringToFront();
// enable callbacks from MediaButtons and TransportControls
mediaController = new MediaController(getActivity());
mediaController.setBackgroundColor(getResources().getColor(R.color.transparent));
mediaController.setAnchorView(mVideoView);
String url = mCurrentItem.getmDownloadLink()
.replace(" ", "%20")
.replace("\\", "/")
.replace("//", "/")
.replace(":/", "://");
mVideoView.setVideoPath(url);
//mVideoView.setVideoURI(Uri.parse(url));
mVideoView.setZOrderOnTop(true);
mVideoView.setMediaController(mediaController);
mVideoView.setVisibility(View.VISIBLE);
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mVideoView.setZOrderOnTop(true);
mLoadingView.setVisibility(View.GONE);
mVideoView.requestFocus();
mp.setLooping(true);
mp.start();
}
});
mVideoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
AlertDialog dialog = new AlertDialog.Builder(getContext())
.setTitle(R.string.video_error_title)
.setMessage(R.string.video_error_message)
.setNeutralButton(R.string.action_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mLoadingView.setVisibility(View.GONE);
mPlayButton.setVisibility(View.VISIBLE);
mImage.setVisibility(View.VISIBLE);
}
})
.show();
return true;
}
});
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.start();
}
});
}
/**
*
*/
public void onStart() {
super.onStart();
Log.d(TAG, "onStart() called");
}
/**
*
*/
public void onResume() {
Log.d(TAG, "onResume() called");
super.onResume();
}
/**
*
*/
public void onPause() {
Log.d(TAG, "onPause() called");
super.onPause();
this.viewCreated = true;
hideVideoView();
}
private void hideVideoView() {
if (mVideoView.isShown() && mVideoView.isPlaying()) {
mVideoView.stopPlayback();
mVideoView.suspend();
}
}
@Override
public void onStop() {
super.onStop();
hideVideoView();
}
}
Кто-нибудь сталкивался с этой проблемой?Есть ли другой процесс, задерживающий мое видео?Если да, какие шаги мне нужно предпринять, чтобы мои видео воспроизводились правильно?Большое спасибо заранее.