All Posts

监听到局域网内的设备信息

项目上有个需要实现的功能, 涉及到几个设备:路由器,全景相机,手机。 路由器发出WIFI供全景相机和手机连接,手机需要拿到全景相机的IP去控制全景相机。 路由器是华为的,有个它自己的App,抓包发现了路由器下连接上的设备信息。 但是华为加密是比较严格的,请求时App端会生成一个密钥供服务端验证,除非华为将这个工具发给我,不然是行不通的,不用想华为也不会告诉我。 还好Google已经有这个功能的一套方案了 https://developer.android.com/training/connect-devices-wirelessly/nsd 试验了2K多次的开关监听,没有一次错误,还是很稳定的。 代码很简单,demo地址:https://github.com/zhanglihow/GetWifiIpDemo

java.net.BindException Address already in use bind 错误

运行Java项目时,遇到了这个报错 该错误是端口号被占用,查看你项目的端口号 application.properties —> server.port=8088 然后控制栏输入 netstat -ano 然后去任务管理器处,找到 pid=3216 的进程,kill它。 重新运行你的项目,完成。

仿知乎广告效果

先放一张知乎的广告截图: 说下我的实现吧,主要利用RecyclerView,在需要出现广告的时候,将这个item透明化,显示 ImageView 就达到这种效果了。最主要是这个RecyclerView的分隔条,用了个三方的才最终达到理想的效果。 可能还是会和原知乎有点不一样,图片广告完全没动,所以这只是好奇实现了一下。 demo地址:https://github.com/zhanglihow/ZhihuRecycler 在网上看到hongyang的实现,自定义了个IamgeView,比较接近了一些。https://github.com/hongyangAndroid/demo_rvadimage

栈和队列基础题

1,设计一个有getMin功能的栈 题目:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中的最小值 要求: 1,pop、push、getMin操作的时间复杂度都是O(1) 2,设计的栈类型可以使用现成的栈的结构 public class Stack1 { private Stack<Integer> stackMin; private Stack<Integer> stackData; public Stack1(){ stackMin=new Stack<>(); stackData=new Stack<>(); } public int getMin(){ if(stackMin.isEmpty()){ throw new RuntimeException("stack is null"); } return stackMin.peek(); } //方案一 //节省空间,pop步骤多 public void push(int newNum){ if(stackMin.isEmpty()){ stackMin.push(newNum); }else{ if(getMin()<=newNum){ stackMin.push(newNum); } } stackData.push(newNum); } public int pop(){ if(stackData.isEmpty()){ throw new RuntimeException("stack is null"); } int value=stackData.pop(); if(value==getMin()){ stackMin.pop(); } return value; } //-------------------------- //方案2 //比方案1多费空间,但省时间 public void push2(int newNum){ if(stackMin.

Python 自动识别抖音小姐姐并点赞

代码基本为原作者 tomxin7 所写,我改了一些逻辑处理和更新API。 效果 抖音经常能刷到很多高质量的视频,特别是我们使用的越多,头条的算法给我们推荐的内容越精准。**那么我们可不可以写一个小型的程序,根据自己设置的特征筛选视频并且自动点赞存入我们的收藏夹中呢?比如漂亮的小姐姐,帅气的小哥哥或者是可爱的喵星人。。。 ** 图片压缩的有点厉害 原理说明 本程序与抖音无关,主要供学习用途 1,将手机打开抖音的推荐视频界面 2,用 ADB 工具获取当前手机截图,并用 ADB 将截图 pull 上来 adb shell screencap -p /sdcard/autojump.png adb pull /sdcard/autojump.png . 3,将图片进行压缩,并调用百度人脸识别API(目前使用的是v3的API) 4,获得百度返回的数据进行判断分析 5,如果满足要求,使用ADB点赞 6,上滑切换新视频 使用教程 1、获取源码 git命令 git clone https://github.com/zhanglihow/DouYinFaceTech.git 2、依赖 Python:3.6.3 ADB下载:http://adbshell.com/downloads 依赖:pip install pillow 3、准备 使用数据线连接手机与电脑,并开启调试模式 申请百度人脸检测的Key FaceMain.py中替换token的host链接 4、运行 手机打开抖音首页 DouYinFaceTech目录下直接运行FaceMain.py 5、可能遇到的问题 1,运行py文件不成功,出现cmd后闪退,建议这样运行有错误提示 cd 项目目录 python FaceMain.py 2,检测到中意的人脸后代码执行 GetDouYinImg.py 的 click_like() 方法时,手机未能点击成功 def click_like(): os.system("adb shell input tap 950 850")#点击事件 需要对应你的手机来更改位置

Flutter--使用 Server酱 推送微信消息给个人

server酱:http://sc.ftqq.com/3.version Server酱 设计的非常简单,你只需要用 Github 账号登录,然后绑定微信同时关注公众号,就可以通过 Http 服务,向绑定的微信号发送通知消息。 发送消息只需要向以下URL发一个GET或者POST请求: https://sc.ftqq.com/[SCKEY].send 接受两个参数: text:消息标题,最长为256,必填。 desp:消息内容,最长64Kb,可空,支持MarkDown。 之前想基于 Haven ,做一个在家发现异常然后给我发通知的一个Demo,苦于邮件发送太麻烦,于是搁置了。但现在看来使用这个好像很不错。 于是用Flutter写了这样一个Demo,就当熟悉下Flutter吧。 使用到了 Flutter 的 Url跳转,Http请求,数据本地持久化SharedPreferences,及一些基础控件。 代码:https://github.com/zhanglihow/serverchan_flutter_demo ​ ​ 参考: Flutter交互控件 Flutter 网络操作 Flutter 本地存储

Java 反射与 open-sdk 来使用 Android hide 方法

一直有个问题,就是清除非本APP 连接的wifi保存的密码,很想像Android系统那样可以直接在WIFI设置那里直接取消保存,于是做了以下尝试。 是在sdk 19以上哦,19以下(包括)是可以直接清除的。 清除wifi密码比较通常的用法是: WifiManager mWifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE); mWifiManager.removeNetwork(config.networkId); mWifiManager.saveConfiguration(); 这样可以清除掉本来是你这个APP连接的WIFI,意思是这个WIFI是别人连接上的你是不能清除掉的。 目前也没有看到其他三方App能够做到这样。 于是开始寻找其他方法。 然后看到了 WifiManager 的这个方法 froget(看起来好像很有希望哦): 说的是替代 removeNetwork 和 saveConfiguration 方法,可是这是hide的,我们显式是调用不了的。 那先试试反射吧。 首先去拿到WifiManager: Class<?> clazz = null; try { clazz = Class.forName("android.net.wifi.WifiManager"); } catch (ClassNotFoundException e) { e.printStackTrace(); KLog.e(e); } 然后构造forget方法: Class<?> actionListener = null; try { actionListener = Class.forName("android.net.wifi.WifiManager$ActionListener"); } catch (ClassNotFoundException e) { e.printStackTrace(); KLog.e(e); } KLog.e("actionListener:" + actionListener); Method method = null; try { method = clazz.

打开Flutter的Demo flutter_gallery失败

如果是git 一直超时,那么科学上网后可解决,不能科学上网的就看下面。 找到目录下的 pubspec.yaml: 将 git 替换为这个 url: https://github.com/zhanglihow/gallery-assets ref: d318485f208376e06d7e330d9f191141d14722b8 像这样: 然后点击右上角的 packges get 运行成功

Flutter之搜索电影

搜索使用的是豆瓣电影API https://developers.douban.com/wiki/?title=movie_v2#subject 效果 ​ 代码: https://github.com/zhanglihow/search_movie 参考: https://github.com/Norbert515/BookSearch https://github.com/WuXiaolong/flutter_movie

Android连接Theta系列(二)

接着上面的Theta第一篇 我们先来改造展示全景相片的View,没有圆球效果,只是将Demo版的View伸展到全屏。 找到 GLRenderer 这个类的 onSurfaceChanged 这个方法,改为: /** * onSurfaceChanged Method * @param gl GLObject (not used) * @param width Screen width * @param height Screen height */ @Override public void onSurfaceChanged(final GL10 gl, final int width, final int height) { int _height = height; mScreenAspectRatio = (float) width / (float) (_height == 0 ? 1 : _height); GLES20.glViewport(0, _height, width, _height); Matrix.setLookAtM(mViewMatrix, 0, mCameraPosX, mCameraPosY, mCameraPosZ, mCameraDirectionX, mCameraDirectionY, mCameraDirectionZ, 0.