public class PhrasesActivity extends AppCompatActivity {
MediaPlayer mediaPlayer;
private MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
releaseMediaPlayer();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.word_list);
final ArrayList<Word> words = new ArrayList<Word>();
#some Word elements added
WordAdapter wordAdapter = new WordAdapter(this, words, R.color.category_phrases);
ListView listView = (ListView)findViewById(R.id.numberlist);
listView.setAdapter(wordAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(PhrasesActivity.this, "Demo", Toast.LENGTH_SHORT).show();
Word word = words.get(i);
releaseMediaPlayer();
mediaPlayer = MediaPlayer.create(PhrasesActivity.this, word.getAudioResourceID());
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(onCompletionListener);
}
});
}
@Override
protected void onPause() {
super.onPause();
Log.v("PhrasesActivity", "onPause: Paused");
releaseMediaPlayer();
}
@Override
protected void onStop() {
super.onStop();
Log.v("PhrasesActivity", "onPause: Stopped");
releaseMediaPlayer();
}
private void releaseMediaPlayer(){
if(mediaPlayer!= null){
mediaPlayer.release();
mediaPlayer= null;
}
}
}
此代码不适用于我的应用中的子活动。
我尝试使用Log.v()
检查日志,但一切都没有发生。没有创建日志。
的修改
- 我试过只使用onPause()方法。这也没有帮助我解决问题。
答案 0 :(得分:2)
代码中的错误是在调用super.onStop()/ super.onPause()之前使用必需的指令语句的顺序;
@Override
protected void onPause() {
// super.onPause();
Log.v("PhrasesActivity", "onPause: Paused");
releaseMediaPlayer();
super.onPause();
}
@Override
protected void onStop() {
// super.onStop();
Log.v("PhrasesActivity", "onPause: Stopped");
releaseMediaPlayer();
super.onStop();
}
一般来说,在java中我们首先调用super();在重写方法中,然后继续进行进一步的代码编写。 我不明白为什么没有在这里遵循,但改变上面的代码帮助我解决了问题。
感谢Mohammed Atif的帮助!
答案 1 :(得分:0)
int
在原始的Udacity教程中,他们仅使用@Override
protected void onPause() {
super.onPause();
releaseMediaPlayer();
}
@Override
protected void onStop() {
super.onStop();
releaseMediaPlayer();
}
方法。
但是,只有onStop
或只有onStop
对我不起作用。
通过将它们都添加(如上所述),对我来说效果很好(Android 10)。 (而且,在致电onPause
之后也不必强制致电super.____()
。)
答案 2 :(得分:-1)
您需要添加覆盖标记并确保扩展活动
实施例
public class MyActivity extends Activity {
@Override
protected void onPause(){
super.onPause();
#Some code
}
@Override
protected void onStop(){
super.onStop();
#Some code
}
}