Изменение ориентации экрана автоматически во время сканирования (с использованием библиотеки ZXING)

Я MainActivity.kt где я показываю разные фрагменты для разных нужд. В какой-то момент я нажимаю кнопку "Х", которая вызывает 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 ответа

Для этого есть ярлык. Просто добавьте это в манифест:

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

В дополнение к этому ответу /questions/26589913/izmenit-orientatsiyu-qr-skanera-s-pomoschyu-zxing-v-android-studio/26589948#26589948

Я нашел способ изменить ориентацию 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();
    }


}

Вы можете установить ориентацию программно (в своей деятельности):

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Другие вопросы по тегам