2015-09-11 16 views
0

Я новичок в этом, поэтому, пожалуйста, позвольте мне помочь, чтобы у меня было приложение для Android, в котором есть одна кнопка Play. При нажатии кнопки воспроизведения он начнет воспроизведение звука, сохраненного в исходной папке, и текст кнопки будет изменен на паузу, чтобы приостановить звук, но когда я заблокирую свой телефон и после разблокировки, когда я нажимаю кнопку, я становлюсь ниже ошибки.Ошибка при воспроизведении звука при разблокировке экрана

09-05 09: 42: 57,749: Е/AndroidRuntime (11722): неустранимые: Главный 09-05 09: 42: 57,749: Е/AndroidRuntime (11722): java.lang.IllegalStateException 09 -05 09: 42: 57.749: E/AndroidRuntime (11722): at android.media.MediaPlayer._pause (собственный метод) 09-05 09: 42: 57.749: E/AndroidRuntime (11722): на android.media.MediaPlayer .pause (MediaPlayer.java:1051) 09-05 09: 42: 57.749: E/AndroidRuntime (11722): at com.example.demo.DemoActivity $ 1.onClick (DemoActivity.java:57) 09-05 09: 42: 57.749: E/AndroidRuntime (11722): at android.view.View.performClick (View.java:4204) 09-05 09: 42: 57.749: E/AndroidRuntime (11722): на android.view.View $ PerformClick.ru n (View.java:17355) 09-05 09: 42: 57.749: E/AndroidRuntime (11722): at android.os.Handler.handleCallback (Handler.java:725) 09-05 09: 42: 57.749: E/AndroidRuntime (11722): at android.os.Handler.dispatchMessage (Handler.java:92) 09-05 09: 42: 57.749: E/AndroidRuntime (11722): at android.os.Looper.loop (Looper. java: 137) 09-05 09: 42: 57.749: E/AndroidRuntime (11722): at android.app.ActivityThread.main (ActivityThread.java:5041) 09-05 09: 42: 57.749: E/AndroidRuntime (11722): at java.lang.reflect.Method.invokeNative (собственный метод) 09-05 09: 42: 57.749: E/AndroidRuntime (11722): at java.lang.reflect.Method.invoke (Method.java:511)) 09-05 09: 42: 57.749: E/AndroidRuntime (11722): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793) 09-05 09: 42: 57.749: E/AndroidRuntime (11722): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:560) 09-05 09: 42: 57.749: E/AndroidRuntime (11722): at dalvik.system.NativeStart.main (Native Method)

Мой код, как показано ниже:

public class DemoActivity extends Activity{ 
MediaPlayer mp; 
public void onCreate(Bundle savedInstanceState) { 
mp = MediaPlayer.create(DemoActivity.this, 
      R.raw.biii); 
final Button btn = (Button) findViewById(R.id.btnOk); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (btn.getText().toString().equalsIgnoreCase("play")) { 
       mp.start(); 
       btn.setText("Pause"); 
      } else if (btn.getText().toString().equalsIgnoreCase("pause")) { 
       mp.pause(); 
       btn.setText("Play"); 
      } 
     } 
    }); 
} 
@Override 
public void onPause() { 
    super.onPause(); 
    mp.release(); 
} 
} 
+0

Media Player выпущен, и вы wana call pause ... пожалуйста, узнайте о жизненном цикле activty ..., чтобы узнать, что вам нужно добавить журналы в 'onCreate',' onPause'' onResume' ... после этого ваш logcat будет показать somthing like * onCreate *, * onResume * ... (теперь заблокировать телефон) * onPause * ... (после разблокировки) * onResume * .... (или нечто подобное) ... с такой информацией вы будете в состоянии подумать об этом – Selvin

+0

@Selvin: я пробовал, как вы сказали, но если я запустил приложение и заблокировал свой телефон, не играя песню, и когда я разблокирую и нажмите кнопку воспроизведения, это даст мне ошибку.Так что, пожалуйста, дайте мне весь код java-кода со всей реализацией метода. Спасибо – Rutvik

ответ

0

Внутри вашего метода вы звоните release(), который ставит MediaPlayer в end состоянии.

Вам необходимо переопределить метод onResume и вызвать метод reset() медиаплеера, которая ставит MediaPlayer в idle состоянии. Затем вызовите setDataSource() со значением вашей исходной папки, чтобы поместить MediaPlayer в состояние initialized. Вызовите prepare() для подготовки MediaPlayer для задач SYNC или prepareAsync() для задач ASYNC.

Вы ДОЛЖНЫ (ДЕЙСТВИТЕЛЬНО!) Читать о состояниях MediaPlayer. У этого есть свой cute little diagram. Не забудьте также прочитать о действиях, потому что вы будете эффективно использовать MediaPlayer, если знаете, как работает Activity lifecycle.

+0

У вас есть код реализации со всем методом, который может решить мою проблему. спасибо – Rutvik

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