AutoJs Web Control 搭建过程【2】
摘要:
Auto.js 和 AutoJs Web Control 联合起来可以实现免root的Android云控。 但是在实际使用还需要解决以下几个问题:
一、目标
Auto.js 和 AutoJs Web Control 联合起来可以实现免root的Android云控。 但是在实际使用还需要解决以下几个问题:
app开机自动启动和自动解锁
app免root自动获取无障碍权限
app和server通讯支持心跳,断线重连
二、实现步骤
app开机自动启动和自动解锁
注册一个静态广播去监听开机启动完毕的广播,然后在监听到开机广播完毕后启动 Auto.js的主Activity或者Service;
首先需要定义一个继承自BroadcastReceiver的开机广播接收者BaseBroadcastReceiver,然后在AndroidManifest.xml文件中增加对应的权限;
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
幸运的是,原作者已经有了这部分代码,我们只需要增加对开机启动广播的响应即可:
Tip:
我们修改的这份代码来自于https://github.com/zrk1993 作者修改了app的包名 src/main/java/org/calibur/stars/external/receiver/BaseBroadcastReceiver.java
BaseBroadcastReceiver.java private static final String LOG_TAG = "BaseBroadcastReceiver"; // 启动 private final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED"; @SuppressLint("CheckResult") public void onReceive(Context context, Intent intent) { Log.d(LOG_TAG, "onReceive: intent = " + intent + ", this = " + this); try { TimedTaskManager.getInstance().getIntentTaskOfAction(intent.getAction()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(intentTask -> runTask(context, intent, intentTask), Throwable::printStackTrace); // add fenfei 开机启动后台服务 // BaseBroadcastReceiver: onReceive: intent = Intent { act=android.intent.action.BOOT_COMPLETED if (ACTION_BOOT.equals(intent.getAction())) { Log.d("fenfei onReceive:", "unLock"); // 获取电源管理器对象 PowerManager pm = (PowerManager) context .getSystemService(Context.POWER_SERVICE); // 获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是调试用的Tag PowerManager.WakeLock wl = pm.newWakeLock( PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright"); // 点亮屏幕 wl.acquire(10000); // 释放 wl.release(); // 得到键盘锁管理器对象 KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); KeyguardManager.KeyguardLock kl = km.newKeyguardLock("unLock"); // 解锁 kl.disableKeyguard(); // end Log.d("fenfei onReceive:", "Boot system Begin"); // 启动开始屏幕 Intent startIntent = new Intent(context, SplashActivity.class); startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(startIntent); Log.d("fenfei onReceive:", "Boot system Finish"); // Intent i = new Intent(context, AlarmRunningService.class); // context.startService(i); } // end } catch (Exception e) { GlobalAppContext.toast(e.getMessage()); } }
app免root自动获取无障碍权限
本文由 帝一博客 原创发布。用户在本站发布的原创内容(包括但不仅限于回答、文章和评论),著作权均归用户本人所有。独家文章转载,请联系邮箱:17762131@qq.com。获得授权后,须注明本文地址: https://bubukou.com/autojs/1625.html
网友留言评论