Android 如何在暂停活动之前将介质恢复到同一位置
//mediaController.show()Android 如何在暂停活动之前将介质恢复到同一位置,android,Android,//mediaController.show() headingMantra2.setOnClickListener(此); mantra2.setOnClickListener(这个); actionBar.setDisplayHomeAsUpEnabled(true); meaningitlemantra2.setOnClickListener(this); 含义mantra2.setOnClickListener(这个); actionBar.setHomeButtonEnabled(真)
headingMantra2.setOnClickListener(此);
mantra2.setOnClickListener(这个);
actionBar.setDisplayHomeAsUpEnabled(true);
meaningitlemantra2.setOnClickListener(this);
含义mantra2.setOnClickListener(这个);
actionBar.setHomeButtonEnabled(真);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例android.R.id.home:{
意向意向=新意向(此,MainActivity.class);
intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
intent.addFlags(intent.FLAG\u ACTIVITY\u SINGLE\u TOP);
STARTACTIVITYIFNEED(意向,0);
返回true;
}
违约:
返回super.onOptionsItemSelected(项目);
}
}
@凌驾
公共无效暂停(){
super.onPause();
暂停();
}
@凌驾
恢复时公开作废(){
super.onResume();
恢复();
}
@凌驾
公共布尔onTouchEvent(运动事件){
mediaController.show();
返回false;
}
@凌驾
公共void onClick(视图v){
if(mediaPlayer.isPlaying())
mediaController.show();
}
@凌驾
受保护的void onStop(){
super.onStop();
mediaController.hide();
mediaPlayer.stop();
mediaPlayer.release();
//mediaPlayer=null;
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.mantra,menu);
返回true;
}
@凌驾
已准备好公开作废(MediaPlayer mp){
mediaController.setMediaPlayer(此);
mediaController.setAnchorView(findViewById(R.id.button2));
}
@凌驾
公开作废开始(){
mediaPlayer.start();
}
公共无效播放(视图五){
start();
}
@凌驾
公共空间暂停(){
mediaPlayer.pause();
SharedReferences prefs=this.getSharedReferences(“,Context.MODE\u PRIVATE);
编辑器编辑器=prefs.edit();
mediaPlayer.pause();
长度=mediaPlayer.getCurrentPosition();
length1=mediaPlayer.getDuration();
editor.putInt(“length”,length);//假设length是整数
编辑:putInt(“长度1”,长度);
commit();
}
公众简历(){
SharedReferences prefs=this.getSharedReferences(“,Context.MODE\u PRIVATE);
int length=prefs.getInt(“length”,0);//0是默认值
//mediaPlayer.start();
mediaPlayer.seekTo(长度);
}
@凌驾
public int getDuration(){
返回mediaPlayer.getDuration();
}
@凌驾
public int getCurrentPosition(){
返回mediaPlayer.getCurrentPosition();
}
@凌驾
公共无效seekTo(内部位置){
mediaPlayer.seekTo(pos);
}
@凌驾
公共布尔值显示(){
返回mediaPlayer.isPlaying();
}
@凌驾
public int getBufferPercentage(){
返回0;
}
@凌驾
公共布尔canPause(){
返回true;
}
@凌驾
公共布尔值canSeekBackward(){
返回true;
}
@凌驾
公共布尔值canSeekForward(){
返回true;
}
@凌驾
public int getAudioSessionId(){
返回0;
}
public void onBackPressed(){
//mediaPlayer.stop();
完成();
}
}在onPause()中,保存播放器的当前位置,例如在共享首选项中。在onResume()中,检索该值,然后使用MediaPlayer.seekTo()定位
可能会给你更多的见解
headingMantra2.setOnClickListener(this);
mantra2.setOnClickListener(this);
actionBar.setDisplayHomeAsUpEnabled(true);
meaningTitleMantra2.setOnClickListener(this);
meaningMantra2.setOnClickListener(this);
actionBar.setHomeButtonEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()) {
case android.R.id.home: {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivityIfNeeded(intent, 0);
return true;
}
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onPause(){
super.onPause();
pause();
}
@Override
public void onResume(){
super.onResume();
resume();
}
@Override
public boolean onTouchEvent(MotionEvent event){
mediaController.show();
return false;
}
@Override
public void onClick(View v) {
if(mediaPlayer.isPlaying())
mediaController.show();
}
@Override
protected void onStop(){
super.onStop();
mediaController.hide();
mediaPlayer.stop();
mediaPlayer.release();
// mediaPlayer = null;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.mantra, menu);
return true;
}
@Override
public void onPrepared(MediaPlayer mp) {
mediaController.setMediaPlayer(this);
mediaController.setAnchorView(findViewById(R.id.button2));
}
@Override
public void start() {
mediaPlayer.start();
}
public void play(View v){
start();
}
@Override
public void pause() {
mediaPlayer.pause();
SharedPreferences prefs = this.getSharedPreferences("<com.ingenvis.omkareshwar>", Context.MODE_PRIVATE);
Editor editor = prefs.edit();
mediaPlayer.pause();
length = mediaPlayer.getCurrentPosition();
length1 = mediaPlayer.getDuration();
editor.putInt("length", length); //assuming length is an integer
editor.putInt("length1", length);
editor.commit();
}
public void resume(){
SharedPreferences prefs = this.getSharedPreferences("<com.ingenvis.omkareshwar>", Context.MODE_PRIVATE);
int length = prefs.getInt("length", 0); //0 is the default value
// mediaPlayer.start();
mediaPlayer.seekTo(length);
}
@Override
public int getDuration() {
return mediaPlayer.getDuration();
}
@Override
public int getCurrentPosition() {
return mediaPlayer.getCurrentPosition();
}
@Override
public void seekTo(int pos) {
mediaPlayer.seekTo(pos);
}
@Override
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}
@Override
public int getBufferPercentage() {
return 0;
}
@Override
public boolean canPause() {
return true;
}
@Override
public boolean canSeekBackward() {
return true;
}
@Override
public boolean canSeekForward() {
return true;
}
@Override
public int getAudioSessionId() {
return 0;
}
public void onBackPressed(){
// mediaPlayer.stop();
finish();
}
您可以使用存储和检索
length
的值
这是您修改的onPause()
这是日志11-14 01:47:45.827:E/AndroidRuntime(1898):java.lang.RuntimeException:无法恢复活动{com.ingenvis.omkareshwar/com.ingenvis.omkareshwar.MantraActivity}:java.lang。IllegalStateException@AnilManchanda在问题和logcat.11-14 01:47:45.827:E/AndroidRuntime(1898):进程:com.ingenvis.omkareshwar,PID:1898 11-14 01:47:45.827:E/AndroidRuntime(1898):java.lang.RuntimeException:无法恢复活动{com.ingenvis.omkareshwar/com.ingenvis.omkareshwar.MantraActivity}:java.lang.IllegalStateException 11-1401:47:45.827:E/AndroidRuntime(1898):在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2788)11-1401:47:45.827:E/AndroidRuntime(1898):在android.app.ActivityThread.handleResumeActivity(activity.java:2817)这是我的日志getting@AnilManchanda你能把完整的日志作为你问题的一部分吗?上面的内容不能帮助我理解问题的原因。这是我得到的日志
headingMantra2.setOnClickListener(this);
mantra2.setOnClickListener(this);
actionBar.setDisplayHomeAsUpEnabled(true);
meaningTitleMantra2.setOnClickListener(this);
meaningMantra2.setOnClickListener(this);
actionBar.setHomeButtonEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()) {
case android.R.id.home: {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivityIfNeeded(intent, 0);
return true;
}
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onPause(){
super.onPause();
pause();
}
@Override
public void onResume(){
super.onResume();
resume();
}
@Override
public boolean onTouchEvent(MotionEvent event){
mediaController.show();
return false;
}
@Override
public void onClick(View v) {
if(mediaPlayer.isPlaying())
mediaController.show();
}
@Override
protected void onStop(){
super.onStop();
mediaController.hide();
mediaPlayer.stop();
mediaPlayer.release();
// mediaPlayer = null;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.mantra, menu);
return true;
}
@Override
public void onPrepared(MediaPlayer mp) {
mediaController.setMediaPlayer(this);
mediaController.setAnchorView(findViewById(R.id.button2));
}
@Override
public void start() {
mediaPlayer.start();
}
public void play(View v){
start();
}
@Override
public void pause() {
mediaPlayer.pause();
SharedPreferences prefs = this.getSharedPreferences("<com.ingenvis.omkareshwar>", Context.MODE_PRIVATE);
Editor editor = prefs.edit();
mediaPlayer.pause();
length = mediaPlayer.getCurrentPosition();
length1 = mediaPlayer.getDuration();
editor.putInt("length", length); //assuming length is an integer
editor.putInt("length1", length);
editor.commit();
}
public void resume(){
SharedPreferences prefs = this.getSharedPreferences("<com.ingenvis.omkareshwar>", Context.MODE_PRIVATE);
int length = prefs.getInt("length", 0); //0 is the default value
// mediaPlayer.start();
mediaPlayer.seekTo(length);
}
@Override
public int getDuration() {
return mediaPlayer.getDuration();
}
@Override
public int getCurrentPosition() {
return mediaPlayer.getCurrentPosition();
}
@Override
public void seekTo(int pos) {
mediaPlayer.seekTo(pos);
}
@Override
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}
@Override
public int getBufferPercentage() {
return 0;
}
@Override
public boolean canPause() {
return true;
}
@Override
public boolean canSeekBackward() {
return true;
}
@Override
public boolean canSeekForward() {
return true;
}
@Override
public int getAudioSessionId() {
return 0;
}
public void onBackPressed(){
// mediaPlayer.stop();
finish();
}
@Override
protected void onPause() {
Log.d(App.TAG, "onPause called");
if(mMediaPlayer==null){
Log.d(App.TAG, "Returning from onPause because the mediaplayer is null");
super.onPause();
return;
}
// the OS is pausing us, see onResume() for resume logic
settings = getSharedPreferences(Dawdle.TAG, MODE_PRIVATE);
SharedPreferences.Editor ed = settings.edit();
mMediaPlayer.pause();
ed.putInt("LAST_POSITION", mMediaPlayer.getCurrentPosition()); // remember where we are
ed.putBoolean("PAUSED", true);
ed.commit();
Log.d(App.TAG, "LAST_POSITION saved:" + mMediaPlayer.getCurrentPosition());
super.onPause();
releaseMediaPlayer();
}
@Override
public void onResume() {
Log.d(App.TAG, "onResume called");
try {
if (mMediaPlayer==null){
setupMediaPlayer();
}
// if we were paused (set in this.onPause) then resume from the last position
settings = getSharedPreferences(Dawdle.TAG, MODE_PRIVATE);
if (settings.getBoolean("PAUSED", false)) {
// resume from the last position
startPosition= settings.getInt("LAST_POSITION", 0);
Log.d(App.TAG,"Seek to last position:" + startPosition);
}
mMediaPlayer.setDataSource(path);
mMediaPlayer.setDisplay(holder);
// this is key, the call will return immediately and notify this when the player is prepared through a callback to onPrepared
// so we do not block on the UI thread - do not call any media playback methods before the onPrepared callback
mMediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void startVideoPlayback() {
Log.v(App.TAG, "startVideoPlayback at position:" + startPosition);
mMediaPlayer.seekTo(startPosition);
mMediaPlayer.start();
}
@Override
public void pause() {
SharedPreferences prefs = this.getSharedPreferences("<com.your.app>", Context.MODE_PRIVATE);
Editor editor = prefs.edit();
mediaPlayer.pause();
length = mediaPlayer.getCurrentPosition();
length1 = mediaPlayer.getDuration();
editor.putInt("length", length); //assuming length is an integer
editor.putInt("length1", length1); //you should put different values in different variable
editor.commit();
}
public void resume(){
SharedPreferences prefs = this.getSharedPreferences("<com.your.app>", Context.MODE_PRIVATE);
int length = prefs.getInt("length", 0); //0 is the default value
mediaPlayer.start();
mediaPlayer.seekTo(length);
}