做网站推广和网络推广长沙人才网官网
做网站推广和网络推广,长沙人才网官网,软件外包公司创业,朝阳网站建设是什么提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 目录
一、需求背景
二、问题分析
三、对比APP和打印机设备的特点
四、设计
五、编码
总结 提示#xff1a;以下是本篇文章正文内容#xff0c;下面案例可供参考
一、… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 目录
一、需求背景
二、问题分析
三、对比APP和打印机设备的特点
四、设计
五、编码
总结 提示以下是本篇文章正文内容下面案例可供参考
一、需求背景
通过手机APP扫码登录共享打印机设备然后读取该用户要打印的任务并打印
二、问题分析 很明显这是跨设备了一个是手机一个是打印机
直接通过手机把用户名密码传输过去也不安全
扫码登录这种方式就有了用武之地相当于授权登录。
三、对比APP和打印机设备的特点
APP设备保持登录状态不论何时打开APP都是已登录状态。
打印机设备没有输入用户名密码的地方
常用APP的用户会发现APP登录一次之后除非主动退出否则一直保持登录态这是怎么做到的呢我们发现不变的是手机或者说是这个手机的一个唯一标识我们称之为设备ID。
首次APP登录之后就会将设备ID和登录态关联起来所以只要手机不变登录态就能长久保持。
打印机的核心功能是打印不需要登录只要把任务给它即可。
四、设计
接下来我分享一下我的设计思路
4.1 首先打印机需要有一个授权登录的入口就是二维码系统得有一个生成二维码的功能生成的二维码链接里关联打印机的设备ID用于指定哪个打印机在进行授权登录。
4.2 接下来就是扫码的环节了扫描二维码实际上是访问了链接所代表的接口该接口中主要逻辑包含以下几点1获取当前APP的设备ID2校验该设备ID的登录态3变更打印机设备登录状态为待确认。
4.3 这时候手机会跳转到待确认页面。
4.4 手机操作确认登录打印机获取登录态成功然后进入任务列表页读取待处理任务。
4.5 勾选任务然后进行打印。
完整的设计图如下 这里边一旦状态变为待确认状态后打印机开始轮询拉取最新登录状态。
五、编码
接下来来个示例代码感受一下整个过程
生成二维码
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;public class QRCodeGenerator {public static BufferedImage generateQRCode(String deviceId, int width, int height) throws WriterException, IOException {String qrCodeText deviceId deviceId; // 将设备ID作为二维码内容// 设置二维码参数java.util.MapEncodeHintType, Object hints new java.util.HashMap();hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);hints.put(EncodeHintType.CHARACTER_SET, UTF-8);// 生成二维码矩阵BitMatrix bitMatrix new MultiFormatWriter().encode(qrCodeText, BarcodeFormat.QR_CODE, width, height, hints);// 将二维码矩阵转换为BufferedImage对象BufferedImage qrCodeImage new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);for (int x 0; x width; x) {for (int y 0; y height; y) {int color bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF; // 黑色表示前景白色表示背景qrCodeImage.setRGB(x, y, color);}}return qrCodeImage;}
}
扫描二维码
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.ChecksumException;
import com.google.zxing.FormatException;
import com.google.zxing.NotFoundException;
import com.google.zxing.RGBLuminanceSource;
import com.google.zxing.Reader;
import com.google.zxing.Result;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader;public class QRCodeScannerActivity extends AppCompatActivity {private static final int REQUEST_CODE_SCAN 1;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_qr_scanner);// 启动扫描二维码的ActivityIntent intent new Intent(this, ZXingScannerActivity.class);startActivityForResult(intent, REQUEST_CODE_SCAN);}Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode REQUEST_CODE_SCAN resultCode RESULT_OK) {// 处理扫描结果String qrCodeContent data.getStringExtra(qrCodeContent);String deviceId extractDeviceIdFromQRCodeContent(qrCodeContent);// TODO: 使用deviceId进行登录或其他操作}}private String extractDeviceIdFromQRCodeContent(String qrCodeContent) {// 解析二维码内容提取设备ID// TODO: 实现解析逻辑返回设备ID字符串return null;}
}
确认登录
public class LoginManager {public void confirmLogin(String deviceId) {// TODO: 根据设备ID进行登录验证和处理逻辑}
}
轮询获取当前设备登录态
public class LoginStatusChecker {public boolean isLoggedIn(String deviceId) {// TODO: 根据设备ID检查登录状态并返回结果return false;}
}
后续的读取任务列表和打印就不再赘述了。 总结
大厂面试经常问重要的是思路多动脑思考。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92000.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!