Mediaplayer L oop в MyMediaPlayer. java - PullRequest
0 голосов
/ 19 июня 2020

** У меня есть этот код, чтобы сделать песню go в l oop. В одном действии я сохраняю следующий необработанный идентификатор файла и вызываю метод из второго действия.

Это для первого действия. **

        int_proximacord = res.getIdentifier(str_proximacord, "raw", getPackageName());

        SharedPreferences proximacord = getSharedPreferences("Next_chord", MODE_PRIVATE);
        SharedPreferences.Editor editor = proximacord.edit();
        editor.putString("Next_chord", str_proximacord);
        editor.apply();

        MyMediaPlayer.getMediaPlayerInstance().play_Coach(getApplicationContext());

Затем во втором действии у меня есть проблема в строке:

mediaPlayer.setNextMediaPlayer (mNextPlayer);

Это дает мне эту ошибку:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.tms, PID: 19165
    java.lang.IllegalStateException: This player not initialized
        at android.media.MediaPlayer.setNextMediaPlayer(Native Method)
        at com.example.tms.MyMediaPlayer.createNextMediaPlayer(MyMediaPlayer.java:102)
        at com.example.tms.MyMediaPlayer$4.onCompletion(MyMediaPlayer.java:117)
        at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3381)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

Я думаю, что инициализирую так же, как я инициализировал первый медиаплеер. Я проверил с помощью system.out все переменные, и все они одинаковы.

static MyMediaPlayer getMediaPlayerInstance() {
        if (Instance == null) {
            return Instance = new MyMediaPlayer();
        }
        return Instance;
 }

public void play_Coach(Context context) {

        this.context = context;

        System.out.println("play_Coach: context " + context);
        System.out.println("play_Coach:  this.context " +  this.context);

        SharedPreferences proximacord = context.getSharedPreferences("Next_chord", MODE_PRIVATE);
        str_proximacord = proximacord.getString("Next_chord", "");

        System.out.println("play_Coach: str_proximacord " + str_proximacord);

        Resources res = context.getResources();
        int_proximacord = res.getIdentifier(str_proximacord, "raw", context.getPackageName());

        System.out.println("play_Coach: int_proximacord " + int_proximacord);

        mediaPlayer = MediaPlayer.create(context, int_proximacord);
        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.start();
                mp.setOnCompletionListener(onCompletionListener);

            }
        });
    }

    public void createNextMediaPlayer(Context context, int int_proximacord) {

        System.out.println("createNextMediaPlayer: int_proximacord " + int_proximacord);
        System.out.println("createNextMediaPlayer: context " + context);

        mNextPlayer = MediaPlayer.create(context, int_proximacord);
        mediaPlayer.setNextMediaPlayer(mNextPlayer);
        mediaPlayer.setOnCompletionListener(onCompletionListener);

    }

    private MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {

            mediaPlayer.release();

            System.out.println("onCompletion: context " + context);
            System.out.println("onCompletion: int_proximacord " + int_proximacord);


            createNextMediaPlayer(context, int_proximacord);

        }
    };

...