在不使用第三方扫描仪的情况下集成ZXing?

时间:2012-07-18 06:50:05

标签: android zxing

我已经阅读过很多话题,人们会问如何在一个Android应用程序中集成ZXing,他们需要安装第三方扫描仪应用程序来扫描QR码。

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

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

  1. QR-Droid(第三方应用)
  2. 我自己的应用
  3. 当我使用第一个选项时,相机会被激活,我可以扫描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扫描仪?我在项目中导入了所有源代码。

2 个答案:

答案 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链接