android shouji android手机远程监控

微信红包插件启发

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

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

利用手机的拨号或者短信应用,你拨打手机号码或者发短信即可唤醒手机,然后利用android提供的AccessibilityService进行开发,去监控状态栏进而打开指定页面监控页面控件,并打开摄像头进行监控,前提条件是手机必须装sim卡;利用微信的视频通话功能,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及以上才可以使用此方法。

完整项目我上传在


比丘资源网 » android shouji android手机远程监控

发表回复

提供最优质的资源集合

立即查看 了解详情