0

更新: display.getRotation が 0、90、180、または 270 のいずれかを取得するという印象を受けました。これはケースではなく、ケースに基づいて 0 ~ 3 のいずれかが返されます。

私はアンドロイドがどの向きでも動作できるようにしようとしています。アプリが画面に描画する方法を更新できるようにすることは難しくありませんでしたが、カメラのディスプレイは片側に取り付けられたままです. つまり、カメラを回転させると、画面が更新され、レイアウトが回転して一致しますが、表示される実際のカメラ フィードは依然として横長です。縦向きの Zxing を修正しようとしている人々は、ディスプレイの向きを一致するように修正することに成功しましたが、このディスプレイの向きを更新して (必ずしも向きの変更ではなく、アプリの起動時に) アプリをすべての場所で使用できるようにしたいと考えています。オリエンテーション。

camera.setDisplayOrientation(int);CameraConfigurationManager.javasetDesiredCameraParametersの内部に追加することで、アプリを任意の向きに合わせて変更できます

次のコードを使用して向きを検出し、intsetDisplayOrientationを回転に設定しようとしました。ただし、これにより、スキャン アクティビティが開始されるとすぐにクラッシュが発生しました。2 つのコードが単独でクラッシュを引き起こすことはありませんでした。

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.ArrayIndexOutOfBoundsException: 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.GlobalHistogramBinarizer で.getBlackRow(GlobalHistogramBinarizer.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 で.MultiFormatReader.decodeInternal(MultiFormatReader.java:170) 09-07 15:40:51.540: E/AndroidRuntime(10989): com.google.zxing.MultiFormatReader.decodeWithState(MultiFormatReader.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): アクティビティ com.example.bilisattendancerecorder .Main は ServiceConnection android.speech.tts.TextToSpeech$Connection@422b16b8 を漏らしました。これは元々ここでバインドされていました 09-07 15:40:52.610: E/ActivityThread(10989): android.app.ServiceConnectionLeaked: Activity com.example.bilisattendancerecorder.メインは ServiceConnection android.speech.tts.TextToSpeech$Connection@422b16b8 をリークしました。これは元々ここでバインドされていました 09-07 15:40:52.610: E/ActivityThread(10989): at android.app.LoadedApk$ServiceDispatcher.(LoadedApk.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.bilisattendancerecorder.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.lang.reflect.Method.invokeNative(ネイティブ メソッド) 09-07 15:40:52.610: E/ActivityThread(10989): でjava.lang.reflect.Method.invoke(Method.java:525) 09-07 15:40:52.610: E/ActivityThread(10989): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java で:737) 09-07 15:40:52.610: E/ActivityThread(10989): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 09-07 15:40:52.610: E/ActivityThread (10989): dalvik.system.NativeStart.main(ネイティブ メソッド) でandroid.app.ActivityThread.main(ActivityThread.java:5103) 09-07 15:40:52.610: E/ActivityThread(10989): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 09-07 15: 40:52.610: E/ActivityThread(10989): java.lang.reflect.Method.invoke(Method.java:525) 09-07 15:40:52.610: E/ActivityThread(10989): com.android.internal .os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 09-07 15:40:52.610: E/ActivityThread(10989): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) で09-07 15:40:52.610: E/ActivityThread(10989): dalvik.system.NativeStart.main (ネイティブ メソッド) でandroid.app.ActivityThread.main(ActivityThread.java:5103) 09-07 15:40:52.610: E/ActivityThread(10989): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 09-07 15: 40:52.610: E/ActivityThread(10989): java.lang.reflect.Method.invoke(Method.java:525) 09-07 15:40:52.610: E/ActivityThread(10989): com.android.internal .os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 09-07 15:40:52.610: E/ActivityThread(10989): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) で09-07 15:40:52.610: E/ActivityThread(10989): dalvik.system.NativeStart.main (ネイティブ メソッド) で(Method.java:525) 09-07 15:40:52.610: E/ActivityThread(10989): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 09-07 15: 40:52.610: E/ActivityThread(10989): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 09-07 15:40:52.610: E/ActivityThread(10989): dalvik.system で.NativeStart.main(ネイティブメソッド)(Method.java:525) 09-07 15:40:52.610: E/ActivityThread(10989): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 09-07 15: 40:52.610: E/ActivityThread(10989): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 09-07 15:40:52.610: E/ActivityThread(10989): dalvik.system で.NativeStart.main(ネイティブメソッド)

どんな助けでも大歓迎です、そしてより多くの情報を提供することができます。

ありがとう。

4

0 に答える 0