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

来源:互联网 发布:淘宝客服公司 编辑:程序博客网 时间:2024/06/08 04:26

标题后边(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;@Overridepublic 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来接收,就什么也接收不到。等待大神的重量级方法。



0 0