1. 程式人生 > 其它 >Android中Fragment使用Zxing實現掃碼(簡單版)

Android中Fragment使用Zxing實現掃碼(簡單版)

Android中Fragment使用Zxing實現掃碼(簡單版)

Android 的Fragment 呼叫zxing掃碼並採用onActivityResult獲得掃碼值的方法

Android Studio、Fragmeng、 Zxing 、onActivityResult、IntentIntegrator

在fragmeng中實現zxing掃碼功能

與在Activity實現掃碼的方式相似,首先引入依賴:

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

在Activity(我這裡是MainActivity.class中)實現掃碼的方法如下:

 IntentIntegrator intentIntegrator= new IntentIntegrator(MainActivity);
                intentIntegrator.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) { Toast.makeText(this.getActivity(), "取消掃描", Toast.
LENGTH_LONG).show(); } else { Toast.makeText(this.getActivity(), "掃描內容:" + result.getContents(), Toast.LENGTH_LONG).show(); wcName.setText(result.getContents()); } } else { super.onActivityResult(requestCode, resultCode, data); } //處理結果 }

Fragmeng實現掃碼並獲得掃碼值

*在IntentIntegrator中使用getActivity(),在Fragment中使用onActivityResult時,要首先在宿主Activity中重寫該方法,其程式碼如下:
我這裡是一個Mainpage+4個Fragmeng,在Fragmeng中程式碼如下:

IntentIntegrator intentIntegrator= new IntentIntegrator(getActivity());
                intentIntegrator.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) {
                Toast.makeText(this.getActivity(), "取消掃描", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this.getActivity(), "掃描內容:" + result.getContents(), Toast.LENGTH_LONG).show();
                wcName.setText(result.getContents());
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
        //處理結果
    }

**在Mainpage裡重寫onActivityResult方法;

 @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        getSupportFragmentManager().getFragments();
        if (getSupportFragmentManager().getFragments().size() > 0) {
            List<Fragment> fragments = getSupportFragmentManager().getFragments();
            for (Fragment mFragment : fragments) {
                mFragment.onActivityResult(requestCode, resultCode, data);
            }
        }
    }