我想将zxing扫描仪集成到我的应用程序中,而无需外部应用程序(来自Play商店的zxing扫描仪)。这是我的代码
Button scan = (Button) findViewById(R.id.scan_button);
scan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.setPackage("com.mypackage.app");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, SCANNER_REQUEST_CODE);
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == SCANNER_REQUEST_CODE) {
// Handle scan intent
if (resultCode == Activity.RESULT_OK) {
// Handle successful scan
String contents = intent.getStringExtra("SCAN_RESULT");
String formatName = intent.getStringExtra("SCAN_RESULT_FORMAT");
byte[] rawBytes = intent.getByteArrayExtra("SCAN_RESULT_BYTES");
int intentOrientation = intent.getIntExtra("SCAN_RESULT_ORIENTATION", Integer.MIN_VALUE);
Integer orientation = (intentOrientation == Integer.MIN_VALUE) ? null : intentOrientation;
String errorCorrectionLevel = intent.getStringExtra("SCAN_RESULT_ERROR_CORRECTION_LEVEL");
} else if (resultCode == Activity.RESULT_CANCELED) {
// Handle cancel
}
} else {
// Handle other intents
}
}
AndroidManifest.xml
<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>
我的Android Studio说无法解析符号:
.android.CaptureActivity
,如果我运行此代码,则会发生错误java.lang.ClassNotFoundException: Didn't find class "com.google.zxing.client.android.CaptureActivity"
发生了什么?
最佳答案
尽管已经回答了,但是对于那些想将ZXing用作库而不使用任何自动安装方法(如ANT)的人来说,我感觉是一个深入的解决方案。
ZXing是一个开源项目,允许您(如ZXing网站中所述)将其功能用作项目库,而不必在用户设备上强制安装第三方应用程序,我认为这是大多数项目的首选。
重要的是要注意,创建者可以接受这种方式,并且不会违反他们的任何使用条款,因为我们不会复制他们的代码,而只是将其用作我们项目的库。
一般过程是这样的:
这是使用Eclipse的用户的完整详细过程(对于Studio也可以很容易地实现):
下载ZXing源代码和核心文件
将ZXing项目导入到Eclipse
您拥有的ZXing版本可能需要将core.jar文件分配给
ZXing项目,以检查您的版本是否适用
打开captureActivity项目的libs文件夹,然后检查是否
core.jar文件存在,如果不是,您必须自己添加它,
否则请跳至下一章。
5.1。要添加core.jar文件,请右键单击Eclipse工作区中的captureActivity项目,然后选择Build path> configure。
建立路径
5.2。从侧面菜单中选择“Java构建路径”,然后单击“库”选项卡。
5.3。单击“添加外部JAR”,然后导航到最初导出ZXing zip的位置。
5.4。进入核心文件夹并选择core.jar(名称可能因ZXing版本而异),然后单击“打开”
5.5。现在,您应该在构建路径列表中看到core.jar,单击“订购和导出”选项卡并检查core.jar
将ZXing定义为库并修复代码
8.1。在编辑器中打开每个损坏的Java文件,并用一系列If Ifse语句替换损坏的Switch语句,这是我知道的令人讨厌的部分。
将ZXing添加为您自己的项目的库
添加应用程序所需的ZXing方法
这部分并不是真正的指南,只是到目前为止我发现对自己的需求有用的东西,我主要使用的两种方法是:
运行扫描仪并捕获QR码:
Intent intent = new Intent(getApplicationContext(),CaptureActivity.class);
intent.setAction("com.google.zxing.client.android.SCAN");
intent.putExtra("SAVE_HISTORY", false);
startActivityForResult(intent, 0);
从onActivityResult()中的扫描中检索结果:
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = data.getStringExtra("SCAN_RESULT");
Log.d(TAG, "contents: " + contents);
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
Log.d(TAG, "RESULT_CANCELED");
}
}
请注意,就像android Capture Activity 中的任何其他 Activity 一样,也需要在项目 list 中定义,也请注意,您必须授予项目使用相机的权限,如下所示:
<uses-permission android:name="android.permission.CAMERA" />
<activity
android:name="com.google.zxing.client.android.CaptureActivity"
android:screenOrientation="landscape" >
</activity>
我希望这可以帮助其他人节省一些研究时间。
作为额外的奖励,我建议阅读:
https://biocram.wordpress.com/2013/06/11/integrate-zxing-as-a-library-inside-an-android-project/
关于android - 如何在不安装实际的zxing应用程序的情况下集成Zxing条形码扫描仪(无法解析符号: . android.CaptureActivity)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29159104/