扫描时自动更改屏幕方向(使用ZXING库)

时间:2018-07-12 13:45:28

标签: android orientation zxing barcode-scanner

我已经MainActivity.kt展示了满足不同需求的不同片段。在某个时候,我按下按钮“ X”以调用startScanner()函数:

private fun startScanner() {
    IntentIntegrator(this)
            .setOrientationLocked(false)
            .setPrompt("SCANNING?")
            .initiateScan()
}

Manifest.xml:

<activity
    android:name=".MainActiity"
    android:theme="@style/AppTheme"
    tools:replace="android:screenOrientation"
    android:stateNotNeeded="true"
    android:screenOrientation="fullSensor"
    android:windowSoftInputMode="stateHidden" />

Gradle.file:

compile 'com.journeyapps:zxing-android-embedded:3.6.0'

它确实会打开扫描仪以及所有内容,但是处于横向模式

为什么这不起作用?

3 个答案:

答案 0 :(得分:3)

有一个执行此操作的捷径。只需将其添加到清单中即可:

<activity
       android:name="com.journeyapps.barcodescanner.CaptureActivity"
       android:screenOrientation="portrait"
       tools:replace="android:screenOrientation"
       android:stateNotNeeded="true"/>

答案 1 :(得分:0)

除了此答案https://stackoverflow.com/a/35465968/7666442

我找到了一种在设备方向更改时自动更改zxing扫描仪活动方向的方法

尝试这种方式

  

CaptureActivityPortrait

public class CaptureActivityPortrait extends CaptureActivity {
//Nothing in side.
}
  

CaptureActivityPortrait在清单文件中

    <activity
        android:name=".CaptureActivityPortrait"
        android:stateNotNeeded="false"
        android:theme="@style/zxing_CaptureTheme"
        android:windowSoftInputMode="stateAlwaysHidden"/>
  

在活动中使用这种方式

public class MyActivity extends AppCompatActivity {

    IntentIntegrator qrScan;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        qrScan = new IntentIntegrator(this).setCaptureActivity(CaptureActivityPortrait.class);

        qrScan.setOrientationLocked(false);
        qrScan.initiateScan();
    }


}

答案 2 :(得分:0)

您可以通过编程(在活动中)设置方向:

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);