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);
}
}
}