我已经阅读过很多话题,人们会问如何在一个Android应用程序中集成ZXing,他们需要安装第三方扫描仪应用程序来扫描QR码。
这正是我想做的事情。这就是我到目前为止所做的:
我下载了ZXing项目。我将所有相关的源代码复制到我的Android应用程序中。到目前为止一切都那么好,这一切都很好。当我按下我的应用程序中的按钮时,它会打开一个小对话框,询问我想要使用哪种条形码扫描仪。我有以下选择:
当我使用第一个选项时,相机会被激活,我可以扫描QR码。但是当我使用第二个选项(我自己的应用程序)时,没有任何事情发生。我以为ZXing也带了扫描仪,所以不需要第三方QR扫描仪吗?
但也许我还有其他步骤吗?这就是我的清单的样子:
补充说:
<intent-filter>
<action android:name="com.google.zxing.client.android.SCAN"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
在按钮动作中我有:
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
有没有办法在不需要第三方扫描仪的情况下启动QR扫描仪?我在项目中导入了所有源代码。
答案 0 :(得分:3)
这很困惑,你接受的方法是有害的。
首先,请不要复制我们的应用批发,正如我们在此一再强调的那样。它不仅气馁,而且如果您克隆UI则会违反我们的商标。只是不要这样做。
其次,您正在复制我们的代码,但之后尝试使用Intent的扫描程序。为什么?如果您想使用Intents,则无需使用任何代码。
第三,您宣布您的应用响应我们的应用内容。您正在拦截用于条形码扫描仪的呼叫。如果你能以完全相同的方式回复,好的,但是,我想你并不能保证这一点。通过这样做,你会损害Barcode Scanner的用户,这是你从中获利的开源项目。
答案 1 :(得分:2)
修改您的清单并添加此
<activity
android:configChanges="orientation|keyboardHidden"
android:name="com.google.zxing.client.android.CaptureActivity"
android:screenOrientation="landscape"
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.DEFAULT" />
</intent-filter>
<intent-filter >
<action android:name="com.google.zxing.client.android.SCAN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
还添加相机权限
<uses-permission android:name="android.permission.CAMERA"/>
并在您的Activity中实现onActivityResult方法
public void onActivityResult(int requestCode, int resultCode, Intent intent)
{
if (requestCode == 0)
{
if (resultCode == RESULT_OK)
{
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
Log.i("xZing", "contents: "+contents+" format: "+format);
// Handle successful scan
}
else if (resultCode == RESULT_CANCELED)
{
// Handle cancel
}
}
}
有关详细信息或任何问题,请参阅this链接