#android #react-native #android-picture-in-picture #react-native-modules
Вопрос:
Когда я нажал кнопку Android home,воспроизведите видео pip через собственные модули и передайте URL-адрес видео и текущую продолжительность видео, а собственный модуль примет этот параметр и намерение для видеоактивности.Внутри метода onCreate видеоактивности я пытаюсь показать видео PiP.Когда я нажал на значок в react native,отображается режим PiP, но я не могу вернуться в режим react native.Когда я нажал на кнопку Android Home,режим PiP не отображается.
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);
Активность PiPVideo
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(); } }
}