首页 > 解决方案 > 恢复在 android 中中断的视频

问题描述

我想恢复上次关闭的视频。我已经尝试过了,但问题是当我关闭视频时,last_position它会正确保存。但是当我再次打开该视频时,last_position为 0 表示视频从头开始打开。如何last_position在 onPause() 方法中获取当前值并在 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;
    }
  }

标签: androidonresume

解决方案


第 1 步: 创建静态变量

public  static int  lastPositionTime = 0;

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

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

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

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


推荐阅读