参考:http://www.jianshu.com/p/f67e950d84f7
源码: itsMelo https://github.com/itsMelo/WcAutoReply#fork-destination-box
扩展-自动抢红包http://blog.csdn.net/qq_15796477/article/details/52130416
思路
实现AccessibilityService,重写onAccessibilityEvent(final AccessibilityEvent event),判断event对象是TYPE_NOTIFICATION_STATE_CHANGED(通知栏事件)还是TYPE_WINDOW_STATE_CHANGED(窗体状态改变事件)。
若是TYPE_NOTIFICATION_STATE_CHANGED(通知栏事件)
1.判断是否处于锁屏状态。若是,则唤醒屏幕解锁。
2.判断app是否处于前台。若是,拉起微信。1s后,设置回复文本,模拟点击发送按钮发送。若处于后台,则拉起微信。重复1,2。
相关api
1.判断是否处于锁屏状态是通过KeyguardManager的实例inKeyguardRestrictedInputMode()方法实现。
/**
* 系统是否在锁屏状态
*
* @return
*/
private boolean isScreenLocked() {
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
return keyguardManager.inKeyguardRestrictedInputMode();
}
2.唤醒屏幕并解锁
通过PowerManager.WakeLock对象实例acquire()方法唤醒屏幕,KeyguardManager.KeyguardLock对象实例的disableKeyguard()实现解锁。
private void wakeAndUnlock() {
//获取电源管理器对象
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
//获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是调试用的Tag
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");
//点亮屏幕
wl.acquire(1000);
//得到键盘锁管理器对象
KeyguardManager km = (KeyguardManager) getS