android - 恢复在 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;
}
}
解决方案
第 1 步: 创建静态变量
public static int lastPositionTime = 0;
第二步:将当前位置保存在这个变量的onPause状态中。检查一个条件
if(lastPositionTime == 0){
//save your current position
}
第 3 步:在 OnResume 中调用 seekTo 方法并传递 lastPositionTime
注意:您的最后一个位置变量不是静态的,因此它回滚到默认值使用静态变量作为 localPostion
推荐阅读
- coldfusion - 使用 cfscript new StoredProc() 时如何获取存储过程的结果
- javascript - 复选框限制功能发生后复选框变得不可点击reactjs
- web-scraping - AHK 复制浏览器文本而不激活窗口
- javascript - 使用 react-loadable 拆分代码时的随机块
- distributed-system - 在客户谈判中使用 CAP 定理
- java - 如何使用带有 json 参数的 curl 调用 Web 服务?
- sql - 组合两个表并用唯一标识符替换值
- oop - 抽象类型子例程数组 - Fortran
- linux - echo 语句,即来自其他 bash shell 的标准输出,是否记录在任何地方?
- javascript - jquery - scrollTo 重新滚动元素 FIDDLE