android Zxing在fragment中使用

今天公司有需求,有个扫描二维码的需求,刚开始以为很简单,就直接开始干,添加zxing依赖:

compile 'com.journeyapps:zxing-android-embedded:3.5.0'
compile 'com.google.zxing:core:3.3.0'


然后就是干:

IntentIntegrator integrator = new IntentIntegrator(mCtx);
// 设置要扫描的条码类型,ONE_D_CODE_TYPES:一维码,QR_CODE_TYPES-二维码
integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);
integrator.setCaptureActivity(ScanActivity.class);
integrator.setPrompt("将二维码放到框内即可"); //底部的提示文字,设为""可以置空
integrator.setCameraId(0); //前置或者后置摄像头
integrator.setBeepEnabled(true); //扫描成功的「哔哔」声,默认开启
integrator.setBarcodeImageEnabled(true);
integrator.initiateScan();
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode==AppConstants.PARK_NUM_QR_CODE){
        if (data!=null){
            parknum = data.getStringExtra("parkNum");
        }
    }else{
        LogUtils.e("什么鬼","扫描结果daowo le e ");
        IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        LogUtils.e("什么鬼","扫描结果"+intentResult);
        if (intentResult!=null){
            if (intentResult.getContents()==null){
                ToastUtils.showShortToast("扫码取消");
            }else {
                ToastUtils.showShortToast(intentResult.getContents()+"扫描成功");
            }
        }
    }
}



在onactivityresult中接收扫描结果,但是问题出现了,可以到扫描界面,但是扫描结果死活不出来,没有toast...

然后打断点,发现在扫描完之后,没有到onactivityresult方法中来...百思不得其解,然后一顿搜索,在以为大哥的博客中发现一句:IntentIntegrator有两个方法是forFragment和forSupportFragment应该是用于支持Fragment和支持库版本的Fragment,然后想到我是用viewpager+tablayout+fragment的,并且在fragment中使用zxing....
就想试一试会不会是zxing在fragment中不是这样调用的,然后点击进去果然发现zxing中有这个方法:

/**
 * @param fragment {@link Fragment} invoking the integration.
 *                 {@link #startActivityForResult(Intent, int)} will be called on the {@link Fragment} instead
 *                 of an {@link Activity}
 */
public static IntentIntegrator forSupportFragment(android.support.v4.app.Fragment fragment) {
    IntentIntegrator integrator = new IntentIntegrator(fragment.getActivity());
    integrator.supportFragment = fragment;
    return integrator;
}


于是,就把以前的代码改为:

//                IntentIntegrator integrator = new IntentIntegrator(mCtx);
                IntentIntegrator integrator = IntentIntegrator.forSupportFragment(this);
                // 设置要扫描的条码类型,ONE_D_CODE_TYPES:一维码,QR_CODE_TYPES-二维码
                integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);
                integrator.setCaptureActivity(ScanActivity.class);
                integrator.setPrompt("将二维码放到框内即可"); //底部的提示文字,设为""可以置空
                integrator.setCameraId(0); //前置或者后置摄像头
                integrator.setBeepEnabled(true); //扫描成功的「哔哔」声,默认开启
                integrator.setBarcodeImageEnabled(true);
                integrator.initiateScan();


其他的不变,运行...果然,扫描结果就toast出来了...

也没费多大功夫,哈哈,记录一下,作为心得....

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
最近2013-11-29(Nov 29, 2013)更新的Android ZXing 2.3.0 release源码及编译后的core-2.3.0.jar和android-integration-2.3.0.jar打包亲测可用,如大家有兴趣自己编译的话请参考下面的教程。 下面我写的教程修改自sonikk的csdn博客http://blog.csdn.net/sonikk/article/details/9228481在此向博主sonikk表示敬意! 下载后解压缩ZXing-2.3.0 目录当我们用的文件夹有: android ——这是一个Android的示例工程 android-integration ——这是使用QR码工程需要引用的一个源码 androidtest ——这是一个Android的简单测试工程,好像是需要先安装android目录的应用才能运行 core ——这是核心代码 其它文件夹都用不到的。。。 第一步: 下面将android目录下的工程带入Eclipse 包名:com.google.zxing.client.android 默认工程名:CaptureActivity 第二步: 导入引用代码: 右键工程名 -> Properties -> Java Build Path -> Source -> Link Source... -> 用browse..按钮 选择ZXing-2.3.0\core\src\main\java这个绝对路径,起名core 选择ZXing-2.3.0\android-integration\src\main\java这个绝对路径,起名android-integration (名称需要手动修改,可以起不一样的名字,但是我个人感觉这样命名比较合理) 第三步: 清除android-integration路径下的IntentIntegratorSupportV4.java文件的报错: 我把android的Project Build Target改成了4.0.3(API-15)并在其他的项目的libs复制了一个android-support-v4.jar到CaptureActivity新建的libs文件夹下。(eclipse没有其他项目的话手动建一个就有了,Android是在Android 3.0 (API level 11)开始引入Fragment的,3.0以上开始起为了兼容3.0以下的需要加入这个jar)。 第四步: 右键分别点击core目录和android-integration目录,选择Export.. 打开Java目录,选JAR file 勾选 Export generated class files and resources Export Java source files and resources 勾选Options: Compress the contents of the JAR file 单击Browse...导出选择的目录,起名: core-2.3.0.jar android-integration-2.3.0.jar 大功告成!这样需要的jar文件就生成好了。 zxing主页 https://code.google.com/p/zxing/ 源码下载: https://code.google.com/p/zxing/downloads/list Eclipse生成jar的一般方法,请参考: http://www.cnblogs.com/lan0725/archive/2008/08/28/1873947.html 下一步,如何精简代码?请参考这篇文章: http://www.cnblogs.com/keyindex/archive/2011/06/08/2074900.html 接着,如何将横屏更改为竖屏?请参考这篇文章: http://blog.csdn.net/duqiuke/article/details/8289921 扫描时如何打开闪光灯?请参考: http://www.cnblogs.com/lee0oo0/archive/2012/04/05/2433815.html 希望对大家有所帮助,有问题请加我QQ472950043,android开发大家一起进步!
Android使用ZXing库生成二维码的步骤如下: 1. 首先,在你的项目的build.gradle文件添加ZXing库的依赖项。在dependencies部分添加以下代码: ``` implementation 'com.google.zxing:core:3.4.1' implementation 'com.journeyapps:zxing-android-embedded:4.2.0' ``` 2. 创建一个用于生成二维码的方法。可以在Activity或Fragment创建一个方法,如下所示: ```java import android.graphics.Bitmap; import android.graphics.Color; import android.os.Bundle; import android.widget.ImageView; import androidx.appcompat.app.AppCompatActivity; import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.journeyapps.barcodescanner.BarcodeEncoder; public class MainActivity extends AppCompatActivity { private ImageView qrCodeImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); qrCodeImageView = findViewById(R.id.qr_code_image_view); String text = "Hello, ZXing!"; // 要生成二维码的内容 try { Bitmap bitmap = generateQRCode(text); qrCodeImageView.setImageBitmap(bitmap); } catch (WriterException e) { e.printStackTrace(); } } private Bitmap generateQRCode(String text) throws WriterException { BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, 500, 500); BarcodeEncoder barcodeEncoder = new BarcodeEncoder(); return barcodeEncoder.createBitmap(bitMatrix); } } ``` 3. 在布局文件添加一个ImageView来显示生成的二维码。例如,在activity_main.xml添加以下代码: ```xml <ImageView android:id="@+id/qr_code_image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:scaleType="centerInside" /> ``` 这样,当你的Activity或Fragment启动时,它将生成一个带有指定内容的二维码,并在ImageView显示出来。请确保你的设备上已经安装了ZXing扫描器应用程序,以便能够扫描并解码生成的二维码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值