Получение ошибки камеры в приложении ZXing Barcode

Я пытаюсь использовать библиотеку Zxing для разработки сканера штрих-кодов.

моя деятельность выглядит следующим образом:

public class Scanner extends Activity {  

    private static final String PACKAGE = "com.test.scan";  
    private static final String SCANNER = "com.google.zxing.client.android.SCAN";  
    private static final String SCAN_FORMATS = "UPC_A,UPC_E,EAN_8,EAN_13,CODE_39,CODE_93,CODE_128";  
    private static final String SCAN_MODE = "QR_CODE_MODE";  
    public static final int REQUEST_CODE = 1;  

    @Override  
    public void onCreate(Bundle icicle) {  
        super.onCreate(icicle);  

        setContentView(R.layout.main);  

         Button ok;  
         ok = (Button) findViewById(R.id.b1);  
         ok.setOnClickListener(new View.OnClickListener() {  

             public void onClick(View v) {  

                Intent scanIntent = new Intent(SCANNER);  
                scanIntent.setPackage(PACKAGE);  
                scanIntent.addCategory(Intent.CATEGORY_DEFAULT);  
                scanIntent.putExtra("SCAN_FORMATS", SCAN_FORMATS);  
                scanIntent.putExtra("SCAN_MODE", SCAN_MODE);  
                try {  
                    startActivityForResult(scanIntent, REQUEST_CODE);  
                } catch (ActivityNotFoundException e) {  
                     // TODO: Exception handling  
                }  
            }  

        });  
     }

также файл манифеста:

    <activity android:name=".Scanner"
            android:screenOrientation="landscape"   android:configChanges="orientation|keyboardHidden"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:windowSoftInputMode="stateAlwaysHidden">  
                 <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>

</activity>

<activity android:name="com.google.zxing.client.android.CaptureActivity"
                android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden"  
                android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                android:windowSoftInputMode="stateAlwaysHidden">
                <intent-filter>
                    <action     android:name="com.google.zxing.client.android.SCAN" />
                    <category    android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
            <activity android:name="com.google.zxing.client.android.PreferencesActivity"
                android:label="@string/preferences_name">
            </activity>
            <activity android:name="com.google.zxing.client.android.HelpActivity"
                android:screenOrientation="user">
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
            <activity android:name="com.google.zxing.client.android.share.ShareActivity"
                android:label="@string/share_name" android:screenOrientation="user"
                android:theme="@android:style/Theme.Light">
                <intent-filter>
                    <action android:name="com.google.zxing.client.android.SHARE" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
    <uses-permission android:name="android.permission.CAMERA"

, но я получаю следующую ошибку:

"извините, камера Android столкнулась с проблемой. Возможно, потребуется перезагрузить устройство".

Я следил за несколькими блогами.

Log:

   Unexpected error initializating camera  
    01-27 10:40:48.281: WARN/CaptureActivity(1007): java.lang.RuntimeException: Fail to connect to camera service  
    01-27 10:40:48.281: WARN/CaptureActivity(1007):     at android.hardware.Camera.native_setup(Native Method)  
    01-27 10:40:48.281: WARN/CaptureActivity(1007):     at android.hardware.Camera.<init>(Camera.java:185)  
    01-27 10:40:48.281: WARN/CaptureActivity(1007):     at android.hardware.Camera.open(Camera.java:165)
   01-27 10:40:48.281: WARN/CaptureActivity(1007):     at com.google.zxing.client.android.camera.CameraManager.openDriver(CameraManager.java:126)
    01-27 10:40:48.281: WARN/CaptureActivity(1007):     at com.google.zxing.client.android.CaptureActivity.initCamera(CaptureActivity.java:606)  
    01-27 10:40:48.281: WARN/CaptureActivity(1007):     at com.google.zxing.client.android.CaptureActivity.surfaceCreated(CaptureActivity.java:346)   
    01-27 10:40:48.281: WARN/CaptureActivity(1007):     at android.view.SurfaceView.updateWindow(SurfaceView.java:532)  
    01-27 10:40:48.281: WARN/CaptureActivity(1007):     at android.view.SurfaceView.dispatchDraw(SurfaceView.java:339) 

9 ответов


Это означает, что прибор вернулся null с Camera.open() и он никогда не должен этого делать. Это рассматривается как ошибка устройства. Я не уверен, как вы отладите, почему он это делает, но это причина.

единственный раз, когда я видел, что это происходит последовательно на устройствах Android 2.2, которые имеют только переднюю камеру. API для доступа к фронтальной камере появился только в Android 2.3, а предыдущий Camera.open() метод API может возвращать только заднюю камеру. Так эти возвращаются null. И это ошибка устройства, действительно, так как они действительно должны работать под управлением Android 2.3, чтобы приложения могли использовать переднюю камеру.


для Android 6+, из-за проблемы" разрешение", если вы получили сообщение " Извините, камера столкнулась с проблемой. Возможно, потребуется перезагрузить устройство.", перейдите в Настройки-Приложения-найти "ваше имя приложения" - выберите Разрешения и включите "камера".


разрешение камеры

<uses-permission android:name="android.permission.CAMERA"

не в нужном месте. это должно быть после тега приложения.


Я столкнулся с аналогичной проблемой. При тестировании на Android M камера требует разрешения времени выполнения. Добавление этого ответа только для справки, чтобы помочь любому, кто застрял в подобном сценарии.


возможно, что у вас есть администратор устройства, отключающий доступ к камере. Следует проверить, может ли приложение Android camera запускаться или жалуется на администратора устройства.


У меня такая же проблема Исправлено с

SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

Примечание: это, кажется, недавняя проблема с ОС ( pre V3.0 Android), поскольку код ранее работал.


Я смог разобраться в проблеме, просто разместив разрешения камеры в главном приложении.


Если вы вызываете камеру в эмуляторе android для Android 2.2, это даст исключение . Пока он работает нормально на устройстве.


проверьте свой код, я думаю, что ваш код пытается открыть камеру несколько раз. Загрузите исходный код сканера штрих-кода google zxing и попробуйте его.