Zxing扫描器Android Studio

4

你好,我知道如何导入一个最小的Android库项目来扫描QR码,但是在它扫描完QR码后,我想要得到QR码所获取的结果(例如URL),但我真的不知道如何检索结果,这就是为什么我寻求你的帮助。

我正在尝试使用这个:https://github.com/embarkmobile/zxing-android-minimal#custom-layout

我使用以下代码来启动扫描器:

IntentIntegrator integrator = new IntentIntegrator(this);
integrator.setCaptureLayout(R.layout.custom_layout);
integrator.initiateScan();

提前感谢你。我为webview做了这个。

wb  = (WebView)findViewById(R.id.webView2);
        wb.loadUrl(re);

你在文档的哪个部分遇到了困难?你有阅读过吗? - 323go
1个回答

28

首先,你的Activity必须实现方法Activity.onActivityResult(int, int, Intent),并包含像这样的一行代码:

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
   IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
   if (scanResult != null) {
     // handle scan result
   }
   // else continue with any other code you need in the method
   ...
 }

这是您处理扫描结果的位置。

其次,只需在某个用户操作的响应中调用此函数即可开始扫描过程:

IntentIntegrator integrator = new IntentIntegrator(yourActivity);
 integrator.initiateScan();
注意,如果提示用户下载应用程序,则initiateScan()将返回一个非空的AlertDialog。这使得调用应用程序可能要管理该对话框。特别是,最好在其Activity.onPause()方法中关闭对话框。

您可以使用setTitle(String)自定义此下载提示对话框的标题(或使用setTitleByID(int)按字符串资源ID设置标题)。同样,提示消息和是/否按钮标签也可以更改。

最后,您可以使用addExtra(String,Object)向用于调用扫描仪的Intent添加更多参数。这可用于设置未通过此简化的API直接公开的其他选项。

默认情况下,这将只允许已知正确响应此意图的应用程序这样做。允许响应的应用程序可以使用setTargetApplications(List)进行设置。例如,将其设置为以仅针对Barcode Scanner应用本身进行目标定位。

有关更多详细信息,请参阅此处

示例代码:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

public class MainActivity extends Activity {

    private Button mButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Scanner

        mButton = (Button) findViewById(R.id.assistant_button);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                IntentIntegrator integrator = new IntentIntegrator(MainActivity.this);
                integrator.initiateScan();
            }
        });

    }

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
        if (scanResult != null) {
            String re = scanResult.getContents();
            Log.d("code", re);
        }
        // else continue with any other code you need in the method

    }
 }

在你的xml中有一个按钮,点击它,扫描条形码,然后它将返回条形码的原始内容。


1
非常感谢,现在一切都正常了,只需要获取结果并启动QR码中的URL即可。 - BtAndro
很好,只需启动一个带有webView的活动意图,并加载URL。 - bjiang
是的,但结果不仅仅是URL,它给了我所有的东西,但我只想要URL。 - BtAndro
在我的示例代码中,我测试了一下,它只会将原始数据(如url)返回给字符串re。 - bjiang
我这么做是为了在Webview中打开,但它却在我的浏览器中打开了。wb =(WebView)findViewById(R.id.webView2); wb.loadUrl(re); - BtAndro
如何使用此方法获取特定信息? - H Raval

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接