博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android手机变身简易监控
阅读量:6775 次
发布时间:2019-06-26

本文共 2975 字,大约阅读时间需要 9 分钟。

微信红包插件启发

为了让家里的旧android手机得到充分的利用,受自动抢红包插件启发,结合网络应用可以达到远程控制的目的,而我们这里说的简易监控,就是远程控制手机摄像头开关,想什么时候监控什么时候监控的简易应用。

那么要达到随时随地都可以打开摄像头的效果,除了保持手机开机以外,那就需要我们有能够唤起手机某应用的权利,有两个目前看来最靠谱的方案:

  1. 利用手机的拨号或者短信应用,你拨打手机号码或者发短信即可唤醒手机,然后利用android提供的AccessibilityService进行开发,去监控状态栏进而打开指定页面监控页面控件,并打开摄像头进行监控,前提条件是手机必须装sim卡;

  2. 利用微信的视频通话功能,AccessibilityService进行自动拨打和接听的动作去打开摄像头。毕竟微信可以说是常驻内存,可以随时通过消息唤醒,而且其各项优化已经帮我们节省了很多开销,考虑到家庭场景,安装微信并登录,wifi足够了。

如果没有wifi的情况下只能采用1方案,利用移动4G网络进行视频通信,这里我们采用方案2,其实两者原理是一样的,都是利用AccessibilityService去监控手机状态,代码进行相应的处理,达到自动化的目的。

准备工作

一部android手机,微信,两个互为好友的微信号。

方案实现

AccessibilityService的用法不再赘述,继承AccessibilityService并实现onAccessibilityEvent,来监听通知栏和界面变化,下面是核心代码:

@Override    public void onAccessibilityEvent(AccessibilityEvent event) {        int eventType = event.getEventType();        Log.d("demo","eventType = " + eventType);        switch (eventType) {            //监听通知栏消息            case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:                break;            //监听是否进入微信来电提醒界面            case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:                String className = event.getClassName().toString();                Log.d("demo","classname = " + className);                if("com.tencent.mm.plugin.voip.ui.VideoActivity".equals(className)){                    //自动接听视频通话                    answerVideo();                }                break;        }    }        private void answerVideo(){        Log.d("demo","answerVideo");        AccessibilityNodeInfo rootNode = null;        List
list = null; if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { rootNode = getRootInActiveWindow();//API>=16 if(rootNode == null) return; list = rootNode.findAccessibilityNodeInfosByText("接听"); for(AccessibilityNodeInfo answerNode : list){ if(answerNode != null && answerNode.getText() != null){ Log.d("demo","nodeText = " + answerNode.getText().toString()); if(answerNode.getText().toString().equals("接听")){ AccessibilityNodeInfo parent = answerNode.getParent(); for (int i=parent.getChildCount()-1;i>=0;i--){ if(parent.getChild(i).isClickable()){ parent.getChild(i).performAction(AccessibilityNodeInfo.ACTION_CLICK); return; } } } } } }else{ } }复制代码

其原理很简单,监听微信来电的界面变化,当有视频邀请到达时,微信会启动是否接听视频通话的界面(这里为我们省去了很多事),我们要做的就是找到“接听”的控件,模拟点击就行了。getRootInActiveWindow()方法是API 16才支持,即android系统4.1及以上才可以使用此方法。

完整项目我上传在链接: https://pan.baidu.com/s/1nuM5HXJ 密码: y2c2

完整项目里加入了通过监听通知栏未接来电的消息,来启动微信的操作,以防太久没有启动微信时,视频通话邀请唤不起微信的情况。

为了防止自动接听任意来电,可以在代码里面可以加上对微信号的判断/电话号码的判断等,来提升安全等级,其次要使用需在android系统设置的辅助服务里打开,可以说是很安全了。

自此,一个安全简易的监控实现完成,本文仅供实践学习参考。

转载于:https://juejin.im/post/5a35efe96fb9a045220795b0

你可能感兴趣的文章
PostgreSQL的 initdb 源代码分析之十八
查看>>
JSONObject转换JSON之将Date转换为指定格式(转)
查看>>
UVA 6475 Effective Infection Time
查看>>
Sae配置Java数据库连接
查看>>
JAVA同步容器和并发容器
查看>>
Wcf序列化的循环引用问题1
查看>>
RabbitMQ - 实例操作
查看>>
Java编程的逻辑 (53) - 剖析Collections - 算法
查看>>
Knockout应用开发指南 第五章:创建自定义绑定
查看>>
ECSHOP /api/client/includes/lib_api.php
查看>>
Struts2学习笔记二:开发流程
查看>>
the Determine in June
查看>>
android开发游记:meterial design 5.0 开源控件整套合集 及使用demo
查看>>
程序猿必备的10款web前端动画插件一
查看>>
挂载银行前置机Ukey到windows server2012虚拟机的操作记录
查看>>
[Linux] Systemd 入门教程:实战篇
查看>>
Tslib的移植【转】
查看>>
html实现返回上一页的几种方法(javaScript:history.go(-1);)
查看>>
Optional与Mybatis能否一起
查看>>
构建-4 dependencies 依赖管理
查看>>