Android 如何在暂停活动之前将介质恢复到同一位置

Android 如何在暂停活动之前将介质恢复到同一位置,android,Android,//mediaController.show() headingMantra2.setOnClickListener(此); mantra2.setOnClickListener(这个); actionBar.setDisplayHomeAsUpEnabled(true); meaningitlemantra2.setOnClickListener(this); 含义mantra2.setOnClickListener(这个); actionBar.setHomeButtonEnabled(真)

//mediaController.show()

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);
}