Изменить ориентацию QR-сканера с помощью ZXING в Android Studio

Я надеюсь, что вы можете помочь мне с этим. Я использую встроенную библиотеку Zxing, чтобы использовать QR-сканер, проблема в том, что он находится в альбомном режиме, и я хотел бы изменить его на книжный.

У меня есть это на зависимости моего Graddle

compile 'com.journeyapps:zxing-android-embedded:2.0.1@aar'
compile 'com.journeyapps:zxing-android-integration:2.0.1@aar'
compile 'com.google.zxing:core:3.0.1'

и у меня есть это в моем классе Java, чтобы активировать сканер с помощью кнопки...

public void scanQR(View view){
    IntentIntegrator integrator = new IntentIntegrator(this);
    integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);
    integrator.setResultDisplayDuration(0);//Text..
    integrator.setPrompt(" Scan a QR Code");
    integrator.setScanningRectangle(450, 450);//size
    integrator.setCameraId(0);  // Use a specific camera of the device
    integrator.initiateScan();

}

Спасибо за помощь!

4 ответа

Решение

Я использую

скомпилируйте 'com.journeyapps:zxing-android-embedded:3.1.0@aar'

Это другая версия, поэтому я не знаю, будет ли это работать для вас, но это работает для меня.

Больше о моей настройке, я только компилирую

'Com.journeyapps: ZXing-андроида встраиваемый: 3.1.0@aar'

'Com.google.zxing: ядро:3.0.1'

а я не скомпилировал

'Com.journeyapps: ZXing-андроид-интеграция:2.0.1@aar'

Сначала я создал расширение активности из CaptureActivity.

или щелкните эту ссылку, чтобы просмотреть класс https://gist.github.com/TheGratefulDev/21a557c9a96333ec037c

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

Во-вторых, добавьте это

integrator.setCaptureActivity(CaptureActivityPortait.class);

в код вашего интегратора.

Вот так выглядит моя:

CustomIntegrator integrator = new CustomIntegrator(activity);
            integrator.setDesiredBarcodeFormats(CustomIntegrator.PDF_417);
            integrator.setPrompt("Scan a barcode");
            integrator.setCameraId(0);  // Use a specific camera of the device
            integrator.setOrientationLocked(true);
            integrator.setBeepEnabled(true);
            integrator.setCaptureActivity(CaptureActivityPortrait.class);
            integrator.initiateScan();

Наконец, на AndroidMaifest добавить

   <activity
        android:name=".custom.CaptureActivityPortrait"
        android:screenOrientation="portrait" <---this is the most important line
        android:stateNotNeeded="true"
        android:theme="@style/zxing_CaptureTheme"
        android:windowSoftInputMode="stateAlwaysHidden">
    </activity>

Вместо расширения класса просто добавьте это в манифест:

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

Работает как шарм

Я просто нашел самый простой способ. Мы должны создать еще один класс CaptureActivity.java и написать этот код внутри onclick слушатель:

IntentIntegrator integrator = new IntentIntegrator(activity);
        integrator.setPrompt("Scan a barcode");
        integrator.setDesiredBarcodeFormats(integrator.ALL_CODE_TYPES);
        integrator.setCameraId(0);  
        integrator.setOrientationLocked(false);

        integrator.setCaptureActivity(com.share.ants.hotelmenu.CaptureActivity.class); <--replace with your own java class location here
        integrator.setBeepEnabled(true);

Меня устраивает:

IntentIntegrator integrator = new IntentIntegrator(YourActivity.this);
integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
integrator.setPrompt(getResources().getString(R.string.scan_a_barcode));
integrator.setCameraId(0);
// Use a specific camera of the device
integrator.setBeepEnabled(true);
integrator.setBarcodeImageEnabled(false);
integrator.initiateScan();
Другие вопросы по тегам