Получение ошибки камеры в приложении штрих-кода Zxing
Я пытаюсь использовать Zxing Library для разработки сканера штрих-кода.
Моя активность такова:
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 возникла проблема. Возможно, вам придется перезапустить устройство".
Я следил за несколькими блогами.
Журнал:
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)
Ответы
Ответ 1
Это означает, что устройство вернуло null
из Camera.open()
, и это никогда не должно происходить. Он рассматривался как ошибка устройства. Я не уверен, как вы отлаживаете, почему это делается, но что причина.
Единственный раз, когда я видел это, постоянно происходит на устройствах Android 2.2, у которых есть только фронтальная камера. API для доступа к фронтальной камере появился только в Android 2.3, и предыдущий метод Camera.open()
API может возвращать только обратную камеру. Поэтому они возвращаются null
. И действительно, это ошибка устройства, поскольку на самом деле им нужно запустить Android 2.3, чтобы приложения могли использовать переднюю камеру.
Ответ 2
Для Android 6+ из-за проблемы с разрешением, если вы получили сообщение "Извините, у камеры возникла проблема. Возможно, вам придется перезагрузить устройство". Перейдите в "Настройки - Приложения - найдите" свое приложение name "- выберите" Разрешения "и включите" Камера ".
Ответ 3
разрешение камеры
<uses-permission android:name="android.permission.CAMERA"
не в нужном месте. это должно быть после тега приложения.
Ответ 4
У меня возникла аналогичная проблема. При тестировании на Android M камера требует разрешения времени выполнения. Добавляя этот ответ только для справки, чтобы помочь любому, кто застрял в подобном сценарии.
Ответ 5
Возможно, у вас есть Администратор устройства, который отключает доступ к камере. Должен проверить, может ли приложение для Android-андроида запускаться или жаловаться администратору устройства.
Ответ 6
У меня такая же проблема
Исправлено с помощью
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Примечание: это, по-видимому, недавняя проблема с ОС (pre V3.0 Android), поскольку код ранее работал.
Ответ 7
Мне удалось разобраться с проблемой, просто разместив разрешения камеры в главном приложении.
Ответ 8
Если вы вызываете камеру в эмуляторе Android для Android 2.2, она даст исключение. Пока он работает нормально на устройстве.
Ответ 9
полезно https://github.com/zxing/zxing/wiki/Scanning-Via-Intent (официально размещен в Google Code, теперь на GitHub)
Ответ 10
Проверьте свой код, я думаю, ваш код пытается открыть камеру несколько раз.
Загрузите исходный код сканера штрих-кода google zxing, а затем попробуйте.