0

我已经阅读了许多主题,人们询问如何将 ZXing 集成到 Android 应用程序中,他们必须安装第 3 方扫描仪应用程序才能扫描 QR 码。

这正是我想做的。这是我到目前为止所做的:

我下载了ZXing项目。我将所有相关的源代码复制到我的 Android 应用程序中。到目前为止一切顺利,一切都很好。当我在我的应用程序中按下一个按钮时,它会打开一个小对话框,询问我要使用什么条形码扫描仪。我有以下选择:

  1. QR-Droid(第三方应用程序)
  2. 我自己的应用

当我使用第一个选项时,相机会被激活,我可以扫描二维码。但是当我使用第二个选项(我自己的应用程序)时,什么也没有发生。我以为 ZXing 也有扫描仪,所以不需要 3rd 方 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 扫描仪?我在我的项目中导入了所有源。

4

2 回答 2

3

这很混乱,你接受的方法是有害的。

首先,请不要复制我们的应用程序批发,正如我们在这里反复强调的那样。如果您克隆 UI,这不仅不鼓励,而且违反了我们的商标。只是不要这样做。

其次,您正在复制我们的代码,然后尝试使用 Intent 的扫描仪。为什么?如果你想使用 Intents,你不需要使用任何代码。

第三,您声明您的应用程序响应我们的应用程序 Intent。您正在拦截用于 Barcode Scanner 的呼叫。如果你能以完全相同的方式回复,好的,但是,我想你不能保证这一点。这样做会伤害 Barcode Scanner 的用户,这是您从中获利的开源项目。

于 2012-07-18T09:17:13.790 回答
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
            }
        }
    }

有关更多信息或任何问题,请参阅链接

于 2012-07-18T07:06:46.893 回答