小程序调用扫码怎么做?如何实现调用扫码功能?
小程序调用扫码怎么做?如何实现调用扫码功能?微信小程序有扫码的功能,那么小程序怎么调用扫码功能呢?如果大家想知道小程序调用扫码怎么做就,那么就跟着微小乔小编来往下了解吧。
小程序调用扫码怎么实现?
官方的Demo是写好了一个CaptureActivity提供回调,从自己的页面跳到CaptureActivity,扫描后把数据传回自己的页面(一次只能扫码一条)。
但是我们项目想做到一个自定义扫码布局,并实现类似扫码枪的效果,即在当前页面连续扫码,且在当前页面有所反馈。
1、导入
将zxing.jar放在app的libs下,并右键aslibrary
新建一个将zxing文件放入根目录
导入需要的资源文件ids.xml、activity_capture、qr_code_bg.9.png、scan_line.png、shadow.png、res底下raw文件夹
注册权限
注册activity
2、使用
主要用到的几个类:
CaptureActivity:微信小程序扫码页面
CameraManager:处理Activity的消息机制
CameraConfigurationManager:该类主要负责设置相机的参数信息
DecodeFormatManager:设置扫码的种类
修改:
布局文件就不说了,修改成自己想要的样子,和原文件有一点不同的是,将SurfaceView设置到根布局下,设置layout_height为match_parent(不这么修改,会导致变形,因为预览用的是屏幕分辨率的宽高)。其他的想怎么改就这么改了。
CaptureActivity文件:
handleDecode()方法中,把页面跳转的语句删除,设置为加载数据(这里我为了方便只设置了一个Textview加载小程序数据,可以换成listview)
initCrop()方法中,原微信小程序算法为:
int x = cropLeft * cameraWidth / containerWidth;
int y = cropTop * cameraHeight / containerHeight;
int width = cropWidth * cameraWidth / containerWidth;
int height = cropHeight * cameraHeight / containerHeight;
在这我没弄懂原作者的意思,这算法在全屏没有问题,但是自定义的时候,由于调用的cameraHeight是屏幕的分辨率,而containerHeight是布局高度,会导致扫码框范围变形(布局是看不出来的,看打印日志计算就知道了)。
修改为:
int x = cropLeft;
int y = cropTop;
int width = cropWidth;
int height = cropHeight;
CameraConfigurationManager文件:
设置预览效果:搜索parameters.setPreviewSize
CaptureActivityHandler文件:
原作者是扫码一次后就不继续扫码,这里我们做个修改。
设置一个线程,控制扫码间隔(否则会连续扫码,不合适),这里我设置的是间隔2s
[java] view plain copy print?
// 设置扫码间隔
class MyThread extends Thread
{
@Override
public void run()
{
super.run();
try
{
MyThread.sleep(2000);
cameraManager.requestPreviewFrame(decodeThread.getHandler(), R.id.decode);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
然后在handleMessage()的message.what == R.id.decode_succeeded下面修改
添加:new MyThread().start();
这样我们就可以每隔2s扫码一次了
最后我们要小程序调用扫码效果就实现了,这个功能虚拟机没法做测试,各位下载Demo自己演示吧。
小程序调用扫码怎么做?如何实现调用扫码功能?以上是小编整理小程序调用扫码的相关内容了哦,希望以上的内容对于大家了解小程序调用扫码会有帮助哦,大家快来多多的关注微小乔哦。
相关推荐:
小程序扫码功能是什么?怎么使用扫码功能?
小程序获取方式升级,方便用户信息进行互通
微信小程序客服气泡怎么实现?实现客服气泡代码