Smi*_*tha 19 android barcode-scanner zxing android-camera
我正在尝试使用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
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
也是清单文件:
<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"
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
"抱歉,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)
Run Code Online (Sandbox Code Playgroud)
1nt*_*ger 35
对于Android 6+,由于"权限"问题,如果您收到消息"抱歉,相机遇到问题.您可能需要重启设备.",转到设置 - 应用 - 找到"您的应用名称" - 选择权限并打开"相机".
Con*_*oid 15
相机许可
<uses-permission android:name="android.permission.CAMERA"
Run Code Online (Sandbox Code Playgroud)
不在适当的地方.应该在申请标签之后.
这意味着返回的设备null从Camera.open()它不应该永远做.它被视为设备错误.我不确定你会如何调试它为什么这样做,但这就是原因.
我唯一一次看到这种情况发生在Android 2.2设备上,只有前置摄像头.用于访问前置摄像头的API仅出现在Android 2.3中,之前的Camera.open()API方法可能仅返回后置摄像头.所以这些回归null.它确实是一个设备错误,因为他们真的需要运行Android 2.3才能让应用程序使用前置摄像头.
| 归档时间: |
|
| 查看次数: |
23603 次 |
| 最近记录: |