IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android之飞鹅WiFi打印机 -> 正文阅读

[移动开发]Android之飞鹅WiFi打印机

说明

因公司需求,需要实现连接WiFi打印机进行打印,很多年还没有WiFi的时候做过蓝牙打印机,真实难为我了,废话不多说,开始吧!

效果图

在这里插入图片描述

实现步骤

1:平台创建账号并认证:https://admin.feieyun.com/index.php 审核通过后就会得到相应的USER和UKEY,后面会用到
2:对接相应API:API官方文档自家看

公共参数

    public static final String URL = "http://api.feieyun.cn/Api/Open/";//不需要修改
    public static final String USER = "*********";//*必填*:账号名
    public static final String UKEY = "*********";//*必填*: 飞鹅云后台注册账号后生成的UKEY 【备注:这不是填打印机的KEY】
    public static final String SN = "*********";//*必填*:打印机编号,必须要在管理后台里添加打印机或调用API接口添加之后,才能调用API
    //打印机编号(必填) # 打印机识别码(必填) # 备注名称(选填) # 流量卡号码(选填),多台打印机请换行(\n)添加新打印机信息,每次最多100台。
    //特别说明:打印机识别码就是打印机底座的key 
    String snlist="*******# *******# 拼必达打印机 # *******";

添加打印机

      /**
     * 添加打印机方法
     * @param snlist
     */
    public void rightDatelist(String snlist){
        //获取当前时间戳
        String STIME = String.valueOf(System.currentTimeMillis()/1000);
        OkHttpClient okHttpClient  = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10,TimeUnit.SECONDS)
                .readTimeout(20, TimeUnit.SECONDS)
                .build();

        //以表单形式 post方式提交的数据
        FormBody formBody = new FormBody.Builder()
                .add("user", USER)//飞鹅云后台注册用户名。
                .add("stime", STIME)//当前UNIX时间戳,10位,精确到秒。
                .add("sig", getSHA(USER+UKEY+STIME))//对参数 user+UKEY+stime拼接后(+号表示连接符)进行SHA1加密得到签名,加密后签名值为40位小写字符串。
                .add("apiname", "Open_printerAddlist")//请求的接口名称:Open_printerAddlist
                .add("debug", "0")//debug=1返回非json格式的数据。仅测试时候使用。
                .add("printerContent", snlist)//打印机编号(必填) # 打印机识别码(必填) # 备注名称(选填) # 流量卡号码(选填),多台打印机请换行(\n)添加新打印机信息,每次最多100台。
                .build();
        final Request request = new Request.Builder()
                .url(URL)//请求的url
                .post(formBody)
                .build();


        //创建/Call
        Call call = okHttpClient.newCall(request);
        //加入队列 异步操作
        call.enqueue(new Callback() {
            //请求错误回调方法
            @Override
            public void onFailure(Call call, IOException e) {
                System.out.println("添加失败"+e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if(response.code()==200) {
                    System.out.println("添加成功"+response.body().string());
                }
            }
        });
    }

删除打印机

 /**
     * 删除打印机
     * @param
     */
    public void rightDatelistDc(){
        //获取当前时间戳
        String STIME = String.valueOf(System.currentTimeMillis()/1000);
        OkHttpClient okHttpClient  = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10,TimeUnit.SECONDS)
                .readTimeout(20, TimeUnit.SECONDS)
                .build();

        //post方式提交的数据
        FormBody formBody = new FormBody.Builder()
                .add("user", USER)//飞鹅云后台注册用户名。
                .add("stime", STIME)//当前UNIX时间戳,10位,精确到秒。
                .add("sig", getSHA(USER+UKEY+STIME))//对参数 user+UKEY+stime拼接后(+号表示连接符)进行SHA1加密得到签名,加密后签名值为40位小写字符串。
                .add("apiname", "Open_printerDelList")//请求的接口名称:Open_printerAddlist
                .add("debug", "0")//debug=1返回非json格式的数据。仅测试时候使用。
                .add("snlist", SN)//打印机编号,多台打印机请用减号“-”连接起来。
                .build();
        final Request request = new Request.Builder()
                .url(URL)//请求的url
                .post(formBody)
                .build();


        //创建/Call
        Call call = okHttpClient.newCall(request);
        //加入队列 异步操作
        call.enqueue(new Callback() {
            //请求错误回调方法
            @Override
            public void onFailure(Call call, IOException e) {
                System.out.println("删除失败");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if(response.code()==200) {
                    System.out.println("删除成功"+response.body().string());
                }
            }
        });
    }

打印小票

    /**
     * 打印机打印订单
     * @param
     */
    public void rightDatelistDy(){
        String content;
        content = "<CB>安卓测试打印</CB><BR>";
        content += "名称      单价  数量 金额<BR>";
        content += "--------------------------------<BR>";
        content += "饭       1.0    1   1.0<BR>";
        content += "炒饭      10.0   10  10.0<BR>";
        content += "蛋炒饭     10.0   10  100.0<BR>";
        content += "鸡蛋炒饭    100.0  1   100.0<BR>";
        content += "番茄蛋炒饭   1000.0 1   100.0<BR>";
        content += "西红柿蛋炒饭  1000.0 1   100.0<BR>";
        content += "西红柿鸡蛋炒饭 100.0  10  100.0<BR>";
        content += "备注:加辣<BR>";
        content += "--------------------------------<BR>";
        content += "合计:10000.0元<BR>";
        content += "送货地点:贵州易荣德尚<BR>";
        content += "联系电话:17385159420<BR>";
        content += "订餐时间:2021-08-04 08:08:08<BR>";
//        content += "<QR>http://www.dzist.com</QR>";
        String STIME = String.valueOf(System.currentTimeMillis()/1000);
        OkHttpClient okHttpClient  = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10,TimeUnit.SECONDS)
                .readTimeout(20, TimeUnit.SECONDS)
                .build();

        //post方式提交的数据
        FormBody formBody = new FormBody.Builder()
                .add("user", USER)//飞鹅云后台注册用户名
                .add("stime", STIME)//当前UNIX时间戳,10位,精确到秒。
//                .add("backurl","http://mini.llskj.cn/feieyun_verify_pWEenZ263Q1BzvXC.txt")//必须先在管理后台设置,回调数据格式详见《订单状态回调》
//                .add("expired",zeroMillis+"")//订单失效UNIX时间戳,10位,精确到秒,打印时超过该时间该订单将抛弃不打印,取值范围为:当前时间<订单失效时间≤24小时后。
                .add("sig", getSHA(USER+UKEY+STIME))//对参数 user+UKEY+stime拼接后(+号表示连接符)进行SHA1加密得到签名,加密后签名值为40位小写字符串。
                .add("apiname", "Open_printMsg")//请求的接口名称
                .add("sn", SN)//打印机编号
                .add("content", content)//打印内容,不能超过5000字节
                .add("times","1")//打印次数
                .build();
        final Request request = new Request.Builder()
                .url(URL)//请求的url
                .post(formBody)
                .build();


        System.out.println("打印机编号:"+SN);
        //创建/Call
        Call call = okHttpClient.newCall(request);
        //加入队列 异步操作
        call.enqueue(new Callback() {
            //请求错误回调方法
            @Override
            public void onFailure(Call call, IOException e) {
                System.out.println("打印失败");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if(response.code()==200) {
                    System.out.println("打印成功"+response.body().string());
                }
            }
        });
    }

SHA-1加密字符串

    /**
     * SHA-1加密字符串
     *
     * @param info
     * @return
     */
    public static String getSHA(String info) {
        byte[] bytesSHA = null;
        try {
            // 得到一个SHA-1的消息摘要
            MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
            // 添加要进行计算摘要的信息
            messageDigest.update(info.getBytes());
            // 得到该摘要
            bytesSHA = messageDigest.digest();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        String strSHA = byteToHex(bytesSHA);
        return strSHA;
    }

Bytes数组转换为字符串

    /**
     * Bytes数组转换为字符串
     *
     * @param bytes
     * @return
     */
    private static String byteToHex(byte[] bytes) {
        String hs = "";
        String temp;
        for (byte b : bytes) {
            temp = (Integer.toHexString(b & 0XFF));
            if (temp.length() == 1) {
                hs = hs + "0" + temp;
            } else {
                hs = hs + temp;
            }
        }
        return hs;
    }
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:42:49  更:2021-08-12 16:43:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 6:04:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码