Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Zxing:更新摄像头显示方向以匹配所有4个方向。(不仅仅是肖像)_Java_Android_Android Camera_Zxing - Fatal编程技术网

Java Android Zxing:更新摄像头显示方向以匹配所有4个方向。(不仅仅是肖像)

Java Android Zxing:更新摄像头显示方向以匹配所有4个方向。(不仅仅是肖像),java,android,android-camera,zxing,Java,Android,Android Camera,Zxing,更新:我的印象是display.getRotation会得到0、90、180或270中的一个。情况并非如此,根据情况返回0-3中的一个 我一直在尝试允许android在任何方向上工作。允许应用程序更新屏幕显示方式并不困难,但摄像头显示屏仍安装在一侧。ie:如果旋转相机,屏幕将刷新,布局将旋转以匹配,但实际显示的相机馈送仍然是横向的。尝试将Zxing固定为纵向的用户已成功地将显示方向固定为匹配,但我希望此显示方向更新(不一定是在方向更改时,但一定是在应用程序启动时),以便应用程序可以在所有方向上使

更新:我的印象是display.getRotation会得到0、90、180或270中的一个。情况并非如此,根据情况返回0-3中的一个

我一直在尝试允许android在任何方向上工作。允许应用程序更新屏幕显示方式并不困难,但摄像头显示屏仍安装在一侧。ie:如果旋转相机,屏幕将刷新,布局将旋转以匹配,但实际显示的相机馈送仍然是横向的。尝试将Zxing固定为纵向的用户已成功地将显示方向固定为匹配,但我希望此显示方向更新(不一定是在方向更改时,但一定是在应用程序启动时),以便应用程序可以在所有方向上使用

通过添加
camera.setDisplayOrientation(int),可以更改应用程序以匹配任何方向
setDesiredCameraParameters中
CameraConfiguration Manager.java中

我尝试使用以下代码检测方向,然后使用
setDisplayOrientation
将int设置为旋转;然而,扫描活动一开始,这就导致了崩溃。这两段代码并没有单独导致崩溃

Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
我这样设置代码:

void setDesiredCameraParameters(Camera camera, boolean safeMode) {
Camera.Parameters parameters = camera.getParameters();
//changes start here
Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();

camera.setDisplayOrientation(rotation);
//changes end here
if (parameters == null) {
  Log.w(TAG, "Device error: no camera parameters are available. Proceeding without configuration.");
  return;
}

Log.i(TAG, "Initial camera parameters: " + parameters.flatten());

if (safeMode) {
  Log.w(TAG, "In camera config safe mode -- most settings will not be honored");
}

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

initializeTorch(parameters, prefs, safeMode);

String focusMode = null;
if (prefs.getBoolean(PreferencesActivity.KEY_AUTO_FOCUS, true)) {
  if (safeMode || prefs.getBoolean(PreferencesActivity.KEY_DISABLE_CONTINUOUS_FOCUS, false)) {
    focusMode = findSettableValue(parameters.getSupportedFocusModes(),
                                  Camera.Parameters.FOCUS_MODE_AUTO);
  } else {
    focusMode = findSettableValue(parameters.getSupportedFocusModes(),
                                  "continuous-picture", // Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE in 4.0+
                                  "continuous-video",   // Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO in 4.0+
                                  Camera.Parameters.FOCUS_MODE_AUTO);
  }
}
// Maybe selected auto-focus but not available, so fall through here:
if (!safeMode && focusMode == null) {
  focusMode = findSettableValue(parameters.getSupportedFocusModes(),
                                Camera.Parameters.FOCUS_MODE_MACRO,
                                "edof"); // Camera.Parameters.FOCUS_MODE_EDOF in 2.2+
}
if (focusMode != null) {
  parameters.setFocusMode(focusMode);
}
//camera.setDisplayOrientation(180);
parameters.setPreviewSize(cameraResolution.x, cameraResolution.y);
camera.setParameters(parameters);
}
碰撞时的logcat提供以下信息:

09-07 15:40:51.540:E/AndroidRuntime(10989):致命异常:线程-33664 09-07 15:40:51.540:E/AndroidRuntime(10989):java.lang.ArrayIndexOutofBounds异常:src.length=115200 srcPos=146970 dst.length=540 dstPos=0 length=540 09-07 15:40:51.540:E/AndroidRuntime(10989):位于java.lang.System.arraycopy(本机方法) 09-07 15:40:51.540:E/AndroidRuntime(10989):在com.google.zxing.PlanarYUVLuminanceSource.getRow(PlanarYUVLuminanceSource.java:71) 09-07 15:40:51.540:E/AndroidRuntime(10989):在com.google.zxing.common.globalHistorogrambinarizer.getBlackRow(globalHistorogrambinarizer.java:62) 09-07 15:40:51.540:E/AndroidRuntime(10989):位于com.google.zxing.BinaryBitmap.getBlackRow(BinaryBitmap.java:65) 09-07 15:40:51.540:E/AndroidRuntime(10989):位于com.google.zxing.oned.OneDReader.doDecode(OneDReader.java:135) 09-07 15:40:51.540:E/AndroidRuntime(10989):在com.google.zxing.oned.OneDReader.decode(OneDReader.java:57) 09-07 15:40:51.540:E/AndroidRuntime(10989):位于com.google.zxing.multiformatrader.decodeInternal(multiformatrader.java:170) 09-07 15:40:51.540:E/AndroidRuntime(10989):在com.google.zxing.multiformatrader.decodeWithState(multiformatrader.java:85) 09-07 15:40:51.540:E/AndroidRuntime(10989):位于com.google.zxing.client.android.DecodeHandler.decode(DecodeHandler.java:86) 09-07 15:40:51.540:E/AndroidRuntime(10989):在com.google.zxing.client.android.DecodeHandler.handleMessage(DecodeHandler.java:59) 09-07 15:40:51.540:E/AndroidRuntime(10989):在android.os.Handler.dispatchMessage(Handler.java:99)上 09-07 15:40:51.540:E/AndroidRuntime(10989):在android.os.Looper.loop(Looper.java:137) 09-07 15:40:51.540:E/AndroidRuntime(10989):在com.google.zxing.client.android.DecodeThread.run(DecodeThread.java:94) 09-07 15:40:52.610:E/ActivityThread(10989):Activity com.example.bilisatendanceRecorder.Main已泄漏服务连接android.speech.tts.TextToSpeech$Connection@422b16b8原来是订在这里的 09-07 15:40:52.610:E/ActivityThread(10989):android.app.ServiceConnection泄漏:Activity com.example.bilisatendanceRecorder.Main已泄漏服务连接android.speech.tts.TextToSpeech$Connection@422b16b8原来是订在这里的 09-07 15:40:52.610:E/ActivityThread(10989):在android.app.LoadedAppk$ServiceDispatcher上(LoadedAppk.java:974) 09-07 15:40:52.610:E/ActivityThread(10989):在android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:868) 09-07 15:40:52.610:E/ActivityThread(10989):位于android.app.ContextImpl.bindServiceAsUser(ContextImpl.java:1452) 09-07 15:40:52.610:E/ActivityThread(10989):位于android.app.ContextImpl.bindService(ContextImpl.java:1440) 09-07 15:40:52.610:E/ActivityThread(10989):位于android.content.ContextWrapper.bindService(ContextWrapper.java:496) 09-07 15:40:52.610:E/ActivityThread(10989):在android.speech.tts.TextToSpeech.connectToEngine(TextToSpeech.java:685) 09-07 15:40:52.610:E/ActivityThread(10989):在android.speech.tts.TextToSpeech.initTts(TextToSpeech.java:655) 09-07 15:40:52.610:E/ActivityThread(10989):在android.speech.tts.TextToSpeech.(TextToSpeech.java:608) 09-07 15:40:52.610:E/ActivityThread(10989):在android.speech.tts.TextToSpeech.(TextToSpeech.java:582) 09-07 15:40:52.610:E/ActivityThread(10989):在android.speech.tts.TextToSpeech.(TextToSpeech.java:567) 09-07 15:40:52.610:E/ActivityThread(10989):位于com.example.bilisatendanceRecorder.Main.onActivityResult(Main.java:526) 09-07 15:40:52.610:E/ActivityThread(10989):在android.app.Activity.dispatchActivityResult(Activity.java:5322) 09-07 15:40:52.610:E/ActivityThread(10989):在android.app.ActivityThread.deliverResults(ActivityThread.java:3363) 09-07 15:40:52.610:E/ActivityThread(10989):位于android.app.ActivityThread.handleSendResult(ActivityThread.java:3410) 09-07 15:40:52.610:E/ActivityThread(10989):位于android.app.ActivityThread.access$1100(ActivityThread.java:141) 09-07 15:40:52.610:E/ActivityThread(10989):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304) 09-07 15:40:52.610:E/ActivityThread(10989):位于android.os.Handler.dispatchMessage(Handler.java:99) 09-07 15:40:52.610:E/ActivityThread(10989):位于android.os.Looper.loop(Looper.java:137) 09-07 15:40:52.610:E/ActivityThread(10989):位于android.app.ActivityThread.main(ActivityThread.java:5103) 09-07 15:40:52.610:E/ActivityThread(10989):位于java.l