Я пытаюсь создать приложение для совместного использования экрана и использовать Web RT C Но когда я пытаюсь сделать снимок экрана в React Native, я получаю эту ошибку в ADB, и мое приложение сразу закрывается
FATAL EXCEPTION: main Вызвано : java .lang.NullPointerException: попытка вызвать виртуальный метод 'android .media.projection.MediaProjection android .media.projection.MediaProjectionManager.getMediaProjection (int, android .content.Intent)' с нулевым значением ссылка на объект 08-03 10: 48: 08.910 E [21716/21716] AndroidRuntime в org.webrt c .ScreenCapturer Android .startCapture (ScreenCapturer Android. java: 109)
и это Java класс, который я использовал как собственный код
package com.oney.WebRTCModule;
class GetDisplayMediaImpl {
private static final int PERMISSION_REQUEST_CODE = (int) (Math.random() * Short.MAX_VALUE);
private static final String TAG = WebRTCModule.TAG;
private final ReactApplicationContext reactContext;
private final WebRTCModule webRTCModule;
private final ActivityEventListener activityEventListener;
private Promise promise;
private Intent mediaProjectionPermissionResultData;
GetDisplayMediaImpl(WebRTCModule webRTCModule, ReactApplicationContext reactContext) {
this.webRTCModule = webRTCModule;
this.reactContext = reactContext;
this.activityEventListener = new BaseActivityEventListener() {
@Override
public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
super.onActivityResult(activity, requestCode, resultCode, data);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (resultCode != Activity.RESULT_OK) {
promise.reject("DOMException", "NotAllowedError");
promise = null;
return;
}
mediaProjectionPermissionResultData = data;
createStream();
}
}
};
reactContext.addActivityEventListener(this.activityEventListener);
}
public void getDisplayMedia(Promise promise) {
if (this.promise != null) {
promise.reject(new RuntimeException("Another operation is pending."));
return;
}
Activity currentActivity = this.reactContext.getCurrentActivity();
MediaProjectionManager mediaProjectionManager =
(MediaProjectionManager) currentActivity.getApplication().getSystemService(
Context.MEDIA_PROJECTION_SERVICE);
currentActivity.startActivityForResult(
mediaProjectionManager.createScreenCaptureIntent(), PERMISSION_REQUEST_CODE);
}
private void createStream() {
MediaStream mediaStream = webRTCModule.mFactory.createLocalMediaStream(streamId);
VideoTrack track = createTrack();
mediaStream.addTrack(track);
WritableMap data = Arguments.createMap();
data.putString("streamId", streamId);
WritableMap trackInfo = Arguments.createMap();
String trackId = track.id();
data.putMap("track", trackInfo);
webRTCModule.localStreams.put(streamId, mediaStream);
promise.resolve(data);
// Cleanup
mediaProjectionPermissionResultData = null;
promise = null;
}
private VideoTrack createTrack() {
VideoCapturer capturer
= new ScreenCapturerAndroid(mediaProjectionPermissionResultData, new MediaProjection.Callback() {
....
});
PeerConnectionFactory pcFactory = webRTCModule.mFactory;
VideoSource source = pcFactory.createVideoSource(capturer.isScreencast());
String id = UUID.randomUUID().toString();
VideoTrack track = pcFactory.createVideoTrack(id, source);
track.setEnabled(true);
capturer.startCapture(width, height, fps);
return track;
}
}
при запуске и при capturer.startCapture (width, height, fps); уволен я получил Т