android - 大家好,如何在 React Native Home Button Pressed 上实现 PiP(画中画)视频?我无法在 React Native 中正确显示画中画视频
问题描述
当我按下 android 主页按钮时,通过本机模块播放 pip 视频并传递视频 url 和视频的当前持续时间,并且本机模块接受该参数和意图给 Video Activity。在 Video Activity OnCreate 方法中,我尝试显示 PiP 视频。当我按下在反应本机图标上,画中画模式显示,但我无法返回反应本机视图。当我按下 Android 主页按钮时,画中画模式无法显示。
PiPModule.java
public class PiPModule extends ReactContextBaseJavaModule {
public PiPModule(ReactApplicationContext reactContext){
super(reactContext);
}
@NonNull
@Override
public String getName() {
return "PiPModule";
}
@ReactMethod
public void showPiPVideo(String videoURL,int seekToDuration)
{
Toast.makeText(getReactApplicationContext(),"showPiPVideo is working",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getCurrentActivity(), PiPVideoActivity.class);
intent.putExtra("VIDEO_URL",videoURL);
intent.putExtra("VIDEO_CURRENT_DURATION",seekToDuration);
getCurrentActivity().startActivity(intent);
}
}
在 React-Native 组件中的使用
import {NativeModules} from 'react-native'
const pipVideo = NativeModules.PiPModule;
pipVideo.showPiPVideo(videoURL, Math.floor(currentTime) * 1000);
画中画活动
public class PiPVideoActivity extends AppCompatActivity {
private String videoPath;
private int videoDuration;
VideoView myVideoView;
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pip_video);
Intent i = getIntent();
if(i != null){
myVideoView = (VideoView) findViewById(R.id.videoView);
videoPath = i.getStringExtra("VIDEO_URL");
videoDuration = i.getIntExtra("VIDEO_CURRENT_DURATION",0);
PlayVideo();
}
else{
Toast.makeText(PiPVideoActivity.this, "VideoURL not found", Toast.LENGTH_SHORT).show();
}
PictureInPictureParams params = new PictureInPictureParams
.Builder()
.setAspectRatio(new Rational(1,1))
.build();
enterPictureInPictureMode(params);
}
private void PlayVideo() {
try {
getWindow().setFormat(PixelFormat.TRANSLUCENT);
Uri video = Uri.parse(videoPath);
myVideoView.setVideoURI(video);
myVideoView.requestFocus();
myVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
//seek to receive miliseconds
myVideoView.seekTo(videoDuration);
myVideoView.start();
}
});
} catch (Exception e) {
System.out.println("Video Play Error :" + e.toString());
finish();
}
}
}
解决方案
推荐阅读
- r - 从逻辑回归模型预测预测值的 CI
- computer-vision - Google Colab 告诉我,视频输入的路径在明确设置正确时未设置
- r - R 中位数不一致
- javascript - 如果功能失败,如何使量角器测试失败?
- python - pandas:pd.concat 导致重复的列
- mysql - 在MySql5.0上发现死锁但在MySql5.6之后没有发现
- node.js - Winston 3.2.1 - TypeError: logger.error 不是函数
- javascript - 用于完全阻止特殊字符的正则表达式模式,并阻止空格开始和结束字符串,并允许在 javascript 中的单词之间
- airflow - 不同的行为取决于 DAG 是否被手动触发
- xml - 为什么批量较大的文件比相同大小的批量较小的文件处理得更快?