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