私のアプリでは、多くの短い (1 ~ 2 秒) ムービーが外部ストレージに保存されています。1 つのアクティビティでそれらのビデオが表示されます。問題は、アクティビティを作成しているときはすべて問題ないことです。しかし、動画を再生したり、動画を変更したりすると、音声のみで黒い画面が表示されることがあります (動画の最初の部分ですが、動画が 1 ~ 2 秒の場合は許容できません)。
一部の投稿では、AsyncTask を使用してビデオを再生することを提案しています。残念ながら、それは役に立ちませんでした。
ビデオの再生は常にアクティビティの作成で機能するため、ユーザーがビデオを再生または変更したい場合に、アクティビティ全体をリロードしていくつかの実験を行いました。高速ビデオ (アクティビティ) の変更で、「ビデオを再生できません」というメッセージが表示されました。
Androidの外部メモリ管理と関係があるのでしょうか?誰かが私が間違っていることを知っていますか?
私が使用しているコード:
//on button click
public void navigateToNext(View view) {
    setNextVideo();
    refreshPlayer();
}
public void play(View view) {
    refreshPlayer();
}
public void refreshPlayer(){
    if(playingTask != null && !playingTask.isCancelled()){
        playingTask.cancel(false);
    }
    initPlayingTask();
}
private void initPlayingTask() {
    playingTask = new AsyncTask(){
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            String videoPath = getActualVideoPath();
            videoView.setVideoPath(videoPath);
            videoView.requestFocus();
            videoView.setOnPreparedListener(new OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                }
            });
        }
        @Override
        protected Object doInBackground(Object... params) {
            while(!this.isCancelled() && videoView.isPlaying());
            return null;
        }
        @Override
        protected void onPostExecute(Object result) {
            super.onPostExecute(result);
        }
    };
    playingTask.execute();
}
mediaPlayers と surface を使ってみました。他のmediaPlayerをキャッシュしようとしました(次のビデオのためにmediaplayerを準備しているので、再生したくないときはプレーヤーを変更しました)。何も役に立たないようでした。
動画はmp4です。