2016-12-18 1 views
0

Я пытаюсь сделать медиаплеер для воспроизведения музыки. Но после игры 3-4 песни он останавливается. И дает следующую ошибку. И я получаю ошибку именно в current = mp.getCurrentPosition(); Мой код:Android-Media player Показывает ошибку при current = mp.getCurrentPosition();

public class player extends AppCompatActivity implements View.OnClickListener { 

    ArrayList<File> mysong; 
    static MediaPlayer mp; 
    SeekBar sb; 
    int position; 
    Uri u; 
    TextView tv; 
    Thread updateseek; 
    Button btplay, btFF, btBB, btnext, btpreviout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_player); 
     sb = (SeekBar) findViewById(R.id.seekBar); 
     btplay = (Button) findViewById(R.id.button); 
     btFF = (Button) findViewById(R.id.button3); 
     btBB = (Button) findViewById(R.id.button2); 
     btnext = (Button) findViewById(R.id.button5); 
     btpreviout = (Button) findViewById(R.id.button4); 
     tv = (TextView)findViewById(R.id.textView2); 
     tv.setVisibility(View.INVISIBLE); 

     btpreviout.setOnClickListener(this); 
     btnext.setOnClickListener(this); 
     btBB.setOnClickListener(this); 
     btFF.setOnClickListener(this); 
     btplay.setOnClickListener(this); 

     if (mp != null) { 
      mp.stop(); 
      mp.release(); 
     } 

     updateseek = new Thread(){ 
      @Override 
      public void run() { 
       int total = mp.getDuration(); 
       int current = 0; 
       sb.setMax(total); 
       while(current < total){ 
        try { 
         sleep(500); 
         current = mp.getCurrentPosition(); 
         sb.setProgress(current); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
       super.run(); 
      } 
     }; 



     Intent i = getIntent(); 
     Bundle b = i.getExtras(); 
     mysong = (ArrayList) b.getParcelableArrayList("mysonglist"); 
     position = b.getInt("pos", 0); 

     u = Uri.parse(mysong.get(position).toString()); 
     mp = MediaPlayer.create(getApplicationContext(), u); 
     mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mp.start(); 
     sb.setMax(mp.getDuration()); 
     updateseek.start(); 

     mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mp) { 
       mp.release(); 
      } 
     }); 


     sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
        if(sb.getProgress()>(mp.getDuration()/2)){ 
         tv.setVisibility(View.VISIBLE); 
        }else tv.setVisibility(View.INVISIBLE); 
      } 

      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 
       btplay.setText("p"); 
      } 

      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 
        mp.seekTo(seekBar.getProgress()); 
      } 
     }); 

    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.button: 
       if (mp.isPlaying()) { 
        mp.pause(); 
       } else mp.start(); 
       break; 

      case R.id.button2: 
       mp.seekTo(mp.getCurrentPosition() - 5000); 
       break; 

      case R.id.button3: 
       mp.seekTo(mp.getCurrentPosition() + 5000); 
       break; 

      case R.id.button4: 
       mp.stop(); 
       mp.release(); 
       position = (position - 1 < 0) ? mysong.size() - 1 : (position - 1) % mysong.size(); 
       u = Uri.parse(mysong.get(position).toString()); 
       mp = MediaPlayer.create(getApplicationContext(), u); 
       sb.setProgress(0); 
       mp.start(); 
       sb.setMax(mp.getDuration()); 
       break; 

      case R.id.button5: 
       mp.stop(); 
       mp.release(); 
       position = (position + 1) % mysong.size(); 
       u = Uri.parse(mysong.get(position).toString()); 
       mp = MediaPlayer.create(getApplicationContext(), u); 
       sb.setProgress(0); 
       mp.start(); 
       sb.setMax(mp.getDuration()); 
       break; 
     } 
    } 
} 

Мой журнал кот здесь:

12-18 18: 04: 37,483 4846-4846/com.bucketlist. dell.musicplayer W/Resources: Преобразование в строку: TypedValue {t = 0x12/d = 0x0 a = 3 r = 0x7f0c0057} 12-18 18: 04: 37.483 4846-4846/com.bucketlist.dell.musicplayer W/Ресурсы: Преобразование в строку : TypedValue {t = 0x12/d = 0x0 a = 3 r = 0x7f0c0058} 12-18 18: 04: 37.493 4846-4846/com.bucketlist.dell.musicplayer W/Resources: Преобразование в строку : TypedValue {t = 0x12/d = 0x0 a = 3 r = 0x7f0c0072} 12-18 18: 04: 37.493 4846-4846/com.bucketlist.dell.musicplayer W/Resources: Преобразование в строку : TypedValue {t = 0x12/d = 0x0 a = 3 r = 0x7f0c0073} 12-18 18: 04: 37.493 4846-4846/com.bucketlist.dell .musicplayer D/AbsSeekBar: AbsSeekBar Конструктор: mAllowedSeeBarAnimation = false 12-18 18: 04: 37.503 4846-4846/com.bucketlist.dell.musicplayer W/Resources: Преобразование в строку : TypedValue {t = 0x12/d = 0x0 a = 3 r = 0x7f0c0074} 12-18 18: 04: 37.503 4846-4846/com.bucketlist.dell.musicplayer W/Resources: Преобразование в строку : TypedValue {t = 0x12/d = 0x0 a = 3 r = 0x7f0c0075} 12-18 18: 04: 37.503 4846-4846/com.bucketlist.dell.musicplayer W/Resources: Преобразование в строку : TypedValue {t = 0x12/d = 0x0 a = 3 r = 0x7f0c0076} 12-18 18: 04: 37.513 4846-4846/com.bucketlist.dell.musicplayer W/Resources: Преобразование в строка: TypedValue {t = 0x12/d = 0x0 a = 3 r = 0x7f0c0077} 12-18 18: 04: 37.513 4846-4846/com.bucketlist.dell .musicplayer W/Resources: Преобразование в string: TypedValue {t = 0x12/d = 0x0 a = 3 r = 0x7f0c0078} 12-18 18: 04: 37.513 4846-4846/com.bucketlist.dell.musicplayer W/Resources : Преобразование в строка: TypedValue {t = 0x12/d = 0x0 a = 3 r = 0x7f0c0079} 12-18 18: 04: 37.513 4846-4846/com.bucketlist.dell.musicplayer I/MediaPlayer: sendBroadcast CONTEXT_AWARE_MUSIC_INFO - тип (стоп) - id (573) 12-18 18: 04: 37.633 4846-4846/com.bucketlist.dell.musicplayer E/MediaPlayer-JNI: Медиаплеер QCMediaPlayer НЕ присутствует 12-18 18: 04: 37.693 4846-4856/com.bucketlist.dell.musicplayer W/MediaPlayer: информация/предупреждение (973, 0) 12-18 18: 04: 37.703 4846-5528/com.bucketlist.dell.musicplayer E/AndroidRuntime: FATAL EXCEPTION: Thread-26716 Процесс: com.bucketlist.dell.musicplayer, PID: 4846 java.lang.IllegalStateException на android.media.MediaPlayer.getCurrentPosition (Native Method) в com.bucketlist.dell.musicplayer.player $ 1.Run (player.java:65) 12-18 18: 04: 37,703 4846 -4846/com.bucketlist.dell.musicplayer E/MediaPlayer: Если есть контроллер субтитров уже установлено 12-18 18: 04: 37,813 4846-4846/com.bucketlist.dell.musicplayer D/PhoneWindow: FMB isFloatingMenuEnabled mFloatingMenuBtn: нуль 12-18 18: 04: 37,813 4846- 4846/com.bucketlist.dell.musicplayer D/PhoneWindow: FMB isFloatingMenuEnabled return false 12-18 18: 04: 37.843 4846-4846/com.bucketlist.dell.musicplayer D/SRIB_DCS: log_dcs ThreadedRenderer :: initialize введен! 12-18 18: 04: 37.863 4846-4846/com.bucketlist.dell.musicplayer I/MediaPlayer: Не отправляйте намерение. msg.arg1 = 0, msg.arg2 = 0 12-18 18: 04: 37.863 4846-4846/com.bucketlist.dell.musicplayer E/MediaPlayer: Должен иметь контроллер субтитров уже установлен 12-18 18: 04: 37.883 4846-4846/com.bucketlist.dell.musicplayer I/MediaPlayer: отправить контекст известно событие 12-18 18: 04: 37,893 4846-4846/com.bucketlist.dell.musicplayer I/MediaPlayer: sendBroadcast CONTEXT_AWARE_MUSIC_INFO - тип (начало) - id (574) 12-18 18: 04: 39.623 4846-5528/com.bucketlist.dell.musicplayer I/Process: сигнал отправки. ПИД: 4846 Sig: 9

12-18 18: 04: 37,633 4846-4846/com.bucketlist.dell.musicplayer Е/MediaPlayer-JNI: QCMediaPlayer медиаплеер НЕ присутствует 12-18 18: 04: 37,693 4846-4856/com.bucketlist.dell.musicplayer W/MediaPlayer: информация/предупреждение (973, 0) 12-18 18: 04: 37.703 4846-5528/com.bucketlist.dell.musicplayer E/AndroidRuntime: FATAL ИСКЛЮЧЕНИЕ: Thread-26716 Процесс: com.bucketlist.dell.musicplayer, PID: 4846 java.lang.IllegalStateException на android.media.MediaPlayer.getCurrentPosition (собственный метод) at com.bucketlist.dell.musicplayer.player $ 1.run (player.java:65) 12-18 18: 04: 37.703 4846-4846/com.bucketlist.dell.musicplayer E/MediaPlayer: Должен иметь контроллер субтитров уже набор

ответ

1

При разработке музыкального проигрывателя я получил то же самое исключение, корневая причина проблемы звонит mp.getCurrentPosition() из неправильного состояния.

Ваши стартовые обновления из oncreate и работают непрерывно, если одна песня завершена, и вы пытаетесь воспроизвести следующую песню в тот момент, когда медиа-плеер находится в состоянии остановки в то время, когда вы пытаетесь вызвать getCurrentPosition, он вызывает исключение.

Так что добавьте условие if (mp.isPlaying) перед вызовом mp.getCurrentPosition() и убедитесь, что песня играет во время вызова getCurrentPosition().

Смежные вопросы