fragment扫描二维码之onActivityResult()接收扫描返回值(1)

标题后边(1)的意思是,这个不是唯一的方法,大神说有第二种,所以先写一个能用的。

关于扫描二维码的代码,可以从前几天写的获取到:http://blog.csdn.net/csdn_loveqingqing/article/details/69569445

因为fragment可以开启扫描的页面,但是获取返回值的方法不会被调用,所以将开启扫描页面,接收扫描结果的方法都放在activity中,

在使用的时候new一个activity的对象,调用扫描的方法。在接收到返回值的时候发送一个广播,到fragment中去接收。

public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (intentResult != null) {
            if (intentResult.getContents() == null) {
            } else {
                String result = intentResult.getContents();
//                DiscoverFragment fragment = new DiscoverFragment();
//                fragment.setResult(result);
                Intent intent = new Intent();
                intent.setAction("com.gasFragment"); // 设置你这个广播的action
                intent.putExtra("result",result);
                sendBroadcast(intent);
                Log.i("log", "进入onActivityResult" + result);
            }
        }
    }
接收:

在fragment中:

private ReceiveBroadCast receiveBroadCast;
@Override
public void onAttach(Activity activity) {

    /** 注册广播 */
    receiveBroadCast = new ReceiveBroadCast();
    IntentFilter filter = new IntentFilter();
    filter.addAction("com.gasFragment");    //只有持有相同的action的接受者才能接收此广播
    activity.registerReceiver(receiveBroadCast, filter);
    super.onAttach(activity);
}
class ReceiveBroadCast extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        String gasname = intent.getExtras().getString("result");
        Log.i("log","在discoverFragment中获取的扫描值"+ gasname);
    }
}

第二种方法

(也可以在获取到返回值后,new一个fragment对象,在fragment对象中设置一个接收返回值的方法去接受);

接受到返回信息之后

DiscoverFragment fragment = new DiscoverFragment();
fragment.setResult(result);
fragment的setResult(result)方法

public String result ;
public void setResult(String res){
    this.result = res;
    /*扫描返回的结果*/
    ToastUtil.showToast("在discoverFragment中显示的"+result);
}

为什么在fragment中onActivityResult()方法不会调用呢?

其实第一次是调用的,在跳转页面的时候,有一个16位的requestCode,第一次调用返回的值是正确的,但是第二次就没有用了。

因为requestCode使用一次就会 加1,第二次的requestCode,就不是第一次请求的那个requestCode,但是接收的时候还是用的第一次的reuqestCode来接收,就什么也接收不到。等待大神的重量级方法。



Android 是一种操作系统,而 Google 的 ZXing 是一个开源的二维码扫描库。通过使用 ZXing 库,我们可以轻松地在 Android 应用程序中实现二维码扫描功能。 要在 Android 应用中使用 ZXing,首先需要在项目的 build.gradle 文件中添加以下依赖: ``` implementation 'com.google.zxing:core:3.3.3' implementation 'com.journeyapps:zxing-android-embedded:4.0.0' ``` 接下来,在布局文件中添加一个 SurfaceView 控件,用于显示相机预览画面。 然后,在 Activity 或 Fragment 中添加以下代码: ``` private IntentIntegrator integrator; @Override protected void onCreate(Bundle savedInstanceState) { // ... integrator = new IntentIntegrator(this); integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE); integrator.setPrompt("请将二维码放入扫描框中"); integrator.setCameraId(0); // 后置摄像头 integrator.setBeepEnabled(false); // 关闭扫描提示音 integrator.setBarcodeImageEnabled(false); // 保存扫描的图片 integrator.initiateScan(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if (result != null) { if (result.getContents() == null) { // 用户取消了扫描 } else { String scanResult = result.getContents(); // 在这里处理扫描得到的二维码数据 } } } ``` 在上述代码中,通过 `IntentIntegrator` 类来发起扫描,并在 `onActivityResult` 方法中处理扫描结果。 以上是使用 ZXing 库实现 Android 中的二维码扫描的简要介绍。使用 ZXing 库可以方便地实现二维码扫描功能,并且还提供了许多其他定制选项和扩展功能,可以根据需要进行使用和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值