局域网 二维码fe分享图片 (带密码验证)

2024-06-07 20:18

本文主要是介绍局域网 二维码fe分享图片 (带密码验证),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

欢迎转载,也请保留这段申明 ,原文地址:https://mp.csdn.net/mdeditor/81051646

最近接到一个需求,需要实现一个局域网的图片二维码分享功能;具体怎么样呢,先看下面的效果图:

git 图,真的是 av 画质 !!!!
image
image

文章代码:https://github.com/LillteZheng/LanServer

由于是局域网,请使用真机,如果有两个手机更好了,连接同个局域网就可以看到;如果是只有一个手机,那就电脑上看把, html 的布局有点丑,因为主要是 适配手机,我也不擅长这一块,见怪不怪吧。

一、需求分析

  • 要实现局域网,一般就是搭建个 ServerSocket,设备连接时输出网址即可

  • 二维码分享,没啥好说,zxing .

    咦,好像就没了啊,关键是局域网这个服务器了, 搭建 Android 的局域网,自己写的话,估计调试都调到很久,github 搜了一下,主要有三个,AndServer ,国人写的,思路比较适合我们,但有时会遇到连接超时的问题,不知道是不是我网络的问题;还有 NanoHttpd 和 AndroidAsync,NanoHttpd 适合java,且调试不好调试,最后选择了 AndroidAsync,接入简单,而且接口也比较好用。(以上只是个人观点),但 AndroidAsync 关于服务器方面的资料还是比较少的,所以得看源码了,不过这里也做了一些封装,到时可以参考一下。

二、代码配置:

局域网,首先需要有网络,所以这里直接检查网络好了,需要检测 WiFi 是否能检测到,这里的 WiFi 的 IP 获取也比较简单,当检测到 WiFi 连接了,直接拿就是了:

 //wifi是否连接if (CusUtil.isWifiConnected()){//获取 ipDEVICE_IP = CusUtil.getWifiIpaddr();StringBuilder sb = new StringBuilder();sb.append("请在同个wifi下,扫描该二维码,或者浏览器中输入: \n").append("http://"+DEVICE_IP+":"+SERVER_PORT).append("\n或者输入:\n").append("http://"+DEVICE_IP+":"+SERVER_PORT+"/password");textView.setText(sb.toString());}else{textView.setText("您还未连接 wifi ");}

如果 WiFi 获取了,则开始配置数据,主要是 ip 和port,当然还有添加拦截器,图片和密码还是需要拦截的。

private void startLanServer(){mCheckRequestHandle = CheckRequestHandle.create(this,DEVICE_IP,SERVER_PORT);//配置数据,builder 模式LanServerBean bean = LanServerBean.lanBuilder().setPort(SERVER_PORT).setIpAddr(DEVICE_IP)//配置默认 html 字符串.setDefaultHtml(CusUtil.getDefaultString(DEVICE_IP,SERVER_PORT))//添加拦截,当检测 image,输出图片.registerHandler("image", ImageRequestHandle.create(this))//添加拦截,当检测 password,弹出密码验证框.registerHandler("password",mCheckRequestHandle).builder();if (mServiceBinder != null) {mServiceBinder.startLanServer(bean);}}

如果自己有新的需求,也可以继续添加拦截器,拦截器也比较简单,AndroidAsync 的 api 还是比较人性化的:

public class ImageRequestHandle implements HttpServerRequestCallback {private static final String TAG = "ImageRequestHandle";private Context mContext;private ImageRequestHandle(Context context){mContext = context;}public static ImageRequestHandle create(Context context){return new ImageRequestHandle(context);}@Overridepublic void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {try {InputStream is = mContext.getAssets().open("beauty.jpg");//输入图片response.sendStream(is,is.available());} catch (Exception e) {e.printStackTrace();}}
}

html 的获取都是在 assets 中,而一些动态的,比如 ip 和 端口,则是通过 代码重新添加,关于 html 的基础,就不解释啦,自己去撸吧:

/*** 输出验证密码的html* @return*/public static  String getCheckPasswordHtml(String ipaddr,int port,String password){StringBuilder sb = new StringBuilder();sb.append(CusUtil.getAssetsString("checkpass.html")).append("\n").append("<button class=\"button\" onclick=\"checkPassword(").append(password+",'"+"http://"+ipaddr+":"+port+"')\">确定</button>").append("\n").append(" </div>").append("\n").append(" </div>").append("\n").append(" </body>").append("\n").append(" </html>").append("\n");return sb.toString();}

三、扩展:

继续局域网分享图片已经懂了,那么像局域网传输文件,信息共享等等,都是可以搞的。比如比较火的 WiFi 传书,就是这个原理。多去折腾吧。

这篇关于局域网 二维码fe分享图片 (带密码验证)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040189

相关文章

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效