微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

恢复视频在 android 中被停止的地方

如何解决恢复视频在 android 中被停止的地方

我想恢复上次关闭的视频。我试过了,但问题是当我关闭视频时,last_position 被正确保存。但是当我再次打开该视频时,last_position 为 0,表示视频从头开始打开。如何获取 onPause() 方法中存在的 last_position 的值并在 onResume() 中使用?

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

holder.itemView.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              Intent intent = new Intent(activity,PlayerActivity.class);
              intent.putExtra("position",position);
              activity.startActivity(intent);
         }
   }  

public class  PlayerActivity extends AppCompatActivity{
SimpleExoPlayer player;
long last_position;
PlayerView playerView;
int position = 0;
ArrayList<Files> myFiles = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    position = getIntent().getIntExtra("position",0);
    String path = myFiles.get(position).getPath();
    Uri uri = Uri.parse(path);
    player= new SimpleExoPlayer.Builder(this).build();
    DataSource.Factory factory = new DefaultDataSourceFactory
            (this,Util.getUserAgent(this,"My App"));
    ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();

    MediaSource mediaSource = new ProgressiveMediaSource.Factory(factory,extractorsFactory).createMediaSource(uri);
    playerView.setPlayer(player);
    playerView.setKeepScreenOn(true);
    player.prepare(mediaSource);

    if (last_Position > 0){
        simpleExoPlayer.seekTo(last_Position);
    }

    player.setPlayWhenReady(true);

@Override
protected void onPause() {
    super.onPause();
    player.setPlayWhenReady(false);
    player.getPlaybackState();
    if (player != null){
        State.last_Position = (int) player.getCurrentPosition();
        State.click_Position = position;
    }
}


@Override
    protected void onResume() {
      super.onResume();
      if (position != State.click_Position){                
            State.last_Position = 0;
      }
      player.seekTo(State.last_Position);
      player.getPlaybackState();
      player.setPlayWhenReady(true);
 }


abstract static class State {
    public static int last_Position = 0;
    public static int click_Position = -1;
    }
  }

解决方法

试试下面的代码,它会对你有所帮助。

 //create a class for manage state or sharedPref
   abstract class State {
   public  static int  lastPosition = 0;
   public  static int  clickPosition = -1;
}

 //update below line in your onPause()
 if (player != null){
    State.lastPosition= player.getCurrentPosition();
    State.clickPosition = position;
}

  //remove code from below method
  @Override
protected void onResume() {
  super.onResume();
  player.seekTo(State.last_Position);
  player.getPlaybackState();
  player.setPlayWhenReady(true);
  }

 // on the click of video you can check if position is same as State.clickPosition then it is not new video
  holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          if(postion != State.clickPosition){
         //this is new video you can reset position
          State.lastPosition = 0;
          }
          Intent intent = new Intent(activity,PlayerActivity.class);
          intent.putExtra("position",position);
          activity.startActivity(intent);
     }
   }  


 playerView.setPlayer(player);
    playerView.setKeepScreenOn(true);
    player.prepare(mediaSource);
    //here you can pass your last position
    if(State.lastPosition>0) player.seekTo(State.lastPosition);
    player.setPlayWhenReady(true);
,

第 1 步: 创建静态变量

public  static int  lastPositionTime = 0;

第 2 步: 在 onPause 状态中保存此变量中的当前位置。检查一个条件

if(lastPositionTime == 0){
   //save your current position
}

第 3 步:在 OnResume 中调用 seekTo 方法并传递 lastPositionTime

注意:您的最后一个位置变量不是静态的,因此它会回滚到默认值,请为 localPostion 使用静态变量

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。