本文已参与「新人创作礼」活动,一起开启掘金创作之路。
效果图
用的是zxing库:是google推出的一个开源的二维码框架,可以实现使用手机的摄像头完成二维码的扫描和解码
- 扫码必须要获取相机权限,否则黑屏
- 相机权限(我是动态获取的) 动态获取权限参考
android.Manifest.permission.CAMERA
- 添加二维码 依赖
//AndroidX 版本
implementation 'com.king.zxing:zxing-lite:1.1.7-androidx'
- 在清单文件中注册(AndroidManifest.xml),加上下面的
<activity
android:name="com.king.zxing.CaptureActivity"
android:screenOrientation="portrait"
android:theme="@style/CaptureTheme"/>
- 需要的显示二维码的处理,比如点击后显示二维码
- 点击事件调用
注意
- 在activity 中
public static final int REQUEST_CODE_SCAN = 0X02;
//点击事件
mineScanCode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeCustomAnimation(this, R.anim.empty, R.anim.empty);
Intent intent = new Intent(this, CaptureActivity.class);
ActivityCompat.startActivityForResult(this, intent, REQUEST_CODE_SCAN, optionsCompat.toBundle());
}
});
- 在fragment 中
public static final int REQUEST_CODE_SCAN = 0X02;
//点击事件
mineScanCode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeCustomAnimation(mContext, R.anim.empty, R.anim.empty);
Intent intent = new Intent(mContext, CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE_SCAN, optionsCompat.toBundle());
}
});
- 处理返回结果
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && data != null) {
switch (requestCode) {
case REQUEST_CODE_SCAN:
String result = data.getStringExtra(Intents.Scan.RESULT);
//判断json格式
if (isJSON(result)){//是否是json格式
JSONObject object = JSONObject.parseObject(result);
}else {
Toast.makeText(mContext,"不是JSON格式",Toast.LENGTH_SHORT).show();
return;
}
break;
}
}
}
// implementation 'com.alibaba:fastjson:1.2.31'
//json 用的是阿里巴巴的
//判断json格式
public static boolean isJSON(String str) {
boolean result = false;
try {
Object obj= JSON.parse(str);
result = true;
} catch (Exception e) {
result=false;
}
return result;
}
- 以上是整个内容,有不懂的欢迎留言