これは、暗闇の中でショットかもしれないが、あなたはREADME.md https://github.com/lwansbrough/react-native-cameraの最初の段落を読めば、それは言う:
これらのドキュメントは、進捗v1のリリースで作業するためのものです。あなたが最新かつ最高のものを使いたいが、重大な不安定さに対処できるなら、npm install --save lwansbrough/react-native-cameraでインストールすることができます。
ライブラリのNPMバージョンは0.3.8:https://www.npmjs.com/package/react-native-cameraです。
EDIT:
だから私は0.3.8でライブラリをインストールするために行って、(あなたは、Androidの携帯電話上でこれをテストしていると仮定して)Javaコードを見てnode_modules
に行き、ネイティブで検索capture
の機能であり、文字通りmetadata
オプションを処理するものはありません。これは悲しいことです。 metadata
をもう一度検索してください、あなたはそれのために何かを見つけることができません。
@ReactMethod
public void capture(final ReadableMap options, final Promise promise) {
int orientation = options.hasKey("orientation") ? options.getInt("orientation") : RCTCamera.getInstance().getOrientation();
if (orientation == RCT_CAMERA_ORIENTATION_AUTO) {
_sensorOrientationChecker.onResume();
_sensorOrientationChecker.registerOrientationListener(new RCTSensorOrientationListener() {
@Override
public void orientationEvent() {
int deviceOrientation = _sensorOrientationChecker.getOrientation();
_sensorOrientationChecker.unregisterOrientationListener();
_sensorOrientationChecker.onPause();
captureWithOrientation(options, promise, deviceOrientation);
}
});
} else {
captureWithOrientation(options, promise, orientation);
}
}
private void captureWithOrientation(final ReadableMap options, final Promise promise, int deviceOrientation) {
Camera camera = RCTCamera.getInstance().acquireCameraInstance(options.getInt("type"));
if (null == camera) {
promise.reject("No camera found.");
return;
}
if (options.getInt("mode") == RCT_CAMERA_CAPTURE_MODE_VIDEO) {
record(options, promise);
return;
}
RCTCamera.getInstance().setCaptureQuality(options.getInt("type"), options.getString("quality"));
if (options.hasKey("playSoundOnCapture") && options.getBoolean("playSoundOnCapture")) {
MediaActionSound sound = new MediaActionSound();
sound.play(MediaActionSound.SHUTTER_CLICK);
}
if (options.hasKey("quality")) {
RCTCamera.getInstance().setCaptureQuality(options.getInt("type"), options.getString("quality"));
}
final Boolean shouldMirror = options.hasKey("mirrorImage") && options.getBoolean("mirrorImage");
RCTCamera.getInstance().adjustCameraRotationToDeviceOrientation(options.getInt("type"), deviceOrientation);
camera.takePicture(null, null, new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
if (shouldMirror) {
data = mirrorImage(data);
if (data == null) {
promise.reject("Error mirroring image");
}
}
camera.stopPreview();
camera.startPreview();
WritableMap response = new WritableNativeMap();
switch (options.getInt("target")) {
case RCT_CAMERA_CAPTURE_TARGET_MEMORY:
String encoded = Base64.encodeToString(data, Base64.DEFAULT);
response.putString("data", encoded);
promise.resolve(response);
break;
case RCT_CAMERA_CAPTURE_TARGET_CAMERA_ROLL: {
File cameraRollFile = getOutputCameraRollFile(MEDIA_TYPE_IMAGE);
if (cameraRollFile == null) {
promise.reject("Error creating media file.");
return;
}
Throwable error = writeDataToFile(data, cameraRollFile);
if (error != null) {
promise.reject(error);
return;
}
addToMediaStore(cameraRollFile.getAbsolutePath());
response.putString("path", Uri.fromFile(cameraRollFile).toString());
promise.resolve(response);
break;
}
case RCT_CAMERA_CAPTURE_TARGET_DISK: {
File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
if (pictureFile == null) {
promise.reject("Error creating media file.");
return;
}
Throwable error = writeDataToFile(data, pictureFile);
if (error != null) {
promise.reject(error);
return;
}
addToMediaStore(pictureFile.getAbsolutePath());
response.putString("path", Uri.fromFile(pictureFile).toString());
promise.resolve(response);
break;
}
case RCT_CAMERA_CAPTURE_TARGET_TEMP: {
File tempFile = getTempMediaFile(MEDIA_TYPE_IMAGE);
if (tempFile == null) {
promise.reject("Error creating media file.");
return;
}
Throwable error = writeDataToFile(data, tempFile);
if (error != null) {
promise.reject(error);
}
response.putString("path", Uri.fromFile(tempFile).toString());
promise.resolve(response);
break;
}
}
}
});
}
しかし、私はiOSの側で見て、彼らはそこにmetadata
オブジェクトを処理しないことがわかります。
EDIT:
また、master
ブランチはまだmetadata
オプションを処理しません。 hereを参照してください。特定のtarget
を指定する必要があり、それが何であるかによって特定のデータ型が返されますが、残念なことに場所に関係するものはありません。
私は現在0.3.8のバージョンを使用しています。私は、メタデータオプションが[古いバージョンのドキュメント](https://github.com/lwansbrough/react-native-camera/tree/8cc61edef2c018b81e1c52f13c7d261fe6a35a63)にも表示されていることに気づいたので、正しく理解すれば、バージョンは問題 – efratyo
@efratyo私は答えを更新しました。 – rclai
確かに参考になりました。どうもありがとうございました! – efratyo