如何解决恢复视频在 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 举报,一经查实,本站将立刻删除。