【Autojs6】自编译6.3.3 隐藏任务快捷方式

查看 79|回复 8
作者:dlufjfiqnurr   
1.  引言

Autojs6是一款优秀的安卓自动化软件,保活能力强,稳定性好。

当然也不贬低AutoX.js,这个软件功能也同样强大,只是个人能力时间场景有限,没有深入使用。


我在以前,学习autojs时,简单的阅读了源码,把原生的autojs的32位版本修改成64版本(不知道更新依赖库,所以也不了了之,建议大家不要尝试),给autojs6或者autoX.js添加下面的三个功能。
由于不会提pr,为了加这三个功能,无论是autojs6还是autoX.js,都跟着编译了几个版本,后来也没有编译了。能用就行。
大家不要问我要其他的,有点找不到了,编译也很麻烦。
2. 修改
目前手上只有编译了autojs6的6.3.3版本,分享给大家。
1.添加了一些常用权限,如蓝牙,闪光灯,termux权限。
2.对脚本创建快捷方式进行了修复。可以正常创建快捷方式。
3.添加了隐藏任务开关。
gif,放大观看


autojs6在后台运行时,开启隐藏,多任务界面就看不到autojs6,关闭,则能够看到autojs6。这样autojs6就一直在后台运行。开启应用自启和电池优化白名单,加锁,就能一直运行。不同手机功能不同,请自行寻找解决方法。
以下代码,提供思路,我也放出来。分享的链接处理对应不同架构apk。

添加权限







隐藏任务

为了方便理解思路,这里以原生autojs最后一个版本,为例,autojs6使用了kotlin版本,可以查找我分享的autojs6 v6.3.3源码复制。
BaseActivity.java
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public void setHideModeEnabled(boolean enabled) {
    ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
    if(am != null) {
        List tasks = am.getAppTasks();
        if (tasks != null && tasks.size() > 0) {
            tasks.get(0).setExcludeFromRecents(enabled);
        }
    }
}
DrawerFragment.java
new DrawerMenuItem(R.drawable.ic_night_mode, R.string.text_hide_task, R.string.key_hide_task, this::toggleHideMode)
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void toggleHideMode(DrawerMenuItemViewHolder holder) {
    ((BaseActivity) getActivity()).setHideModeEnabled(holder.getSwitchCompat().isChecked());
}
package org.autojs.autojs.ui.main
MainActivity.java 中的onCreate方法加入
if(Pref.isHideModeEnabled()){
            super.setHideModeEnabled(true);
}
Pref.java
public static boolean isHideModeEnabled() {
        return def().getBoolean(getString(R.string.key_hide_task), false);
}
autojs6对应version6.3.3
org.autojs.autojs.ui.BaseActivity.kt
//基本窗口类添加设置隐藏模式,方便设置隐藏模式
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
open fun setHideModeEnabled(enabled: Boolean) {
    val am = getSystemService(ACTIVITY_SERVICE) as ActivityManager
    if (am != null) {
        val tasks = am.appTasks
        if (tasks != null && tasks.size > 0) {
            tasks[0].setExcludeFromRecents(enabled)
        }
    }
}
org.autojs.autojs.ui.main.MainActivity.kt#onCreate
// 打开应用读取并设置隐藏任务属性
if(Pref.getBoolean(R.string.key_hide_task_enabled,false)){
        super.setHideModeEnabled(true);
}
org.autojs.autojs.ui.main.drawer.DrawerFragment.kt
//多任务隐藏
private lateinit var mHideTaskItem: DrawerMenuToggleableItem
//隐藏任务
mHideTaskItem = DrawerMenuToggleableItem(
    object : DrawerMenuItemCustomHelper(mContext) {
        override val isActive: Boolean
            get() = Pref.getBoolean(R.string.key_hide_task_enabled,false)
        override fun toggle() {
            TODO("Not yet implemented")
        }
        override fun toggle(aimState: Boolean) {
            (activity as BaseActivity?)!!.setHideModeEnabled(aimState)
            Pref.putBoolean(R.string.key_hide_task_enabled, aimState)
        }
    },
    R.drawable.ic_hide_task,
    R.string.text_hide_task,
    DrawerMenuItem.DEFAULT_DIALOG_CONTENT,
    R.string.key_hide_task_enabled,
)

创建快捷方式

package org.autojs.autojs.external.shortcut;
ShortcutManager.java
@RequiresApi(api = Build.VERSION_CODES.O)
    public void addPinnedShortcut(CharSequence label, String id, Icon icon, Intent intent) {
        if (!mShortcutManager.isRequestPinShortcutSupported()) {
            return;
        }
        ShortcutInfo shortcut = buildShortcutInfo(label, id, icon, intent);
        int req = getRequestCode(id);
        Intent secondIntent = new Intent();
        secondIntent.setAction("android.settings.CAPTIONING_SETTINGS");
        PendingIntent successCallback = PendingIntent.getBroadcast(mContext, 0,
                secondIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        mShortcutManager.requestPinShortcut(shortcut, successCallback.getIntentSender());
    }
    private ShortcutInfo buildShortcutInfo(CharSequence label, String id, Icon icon, Intent intent) {
        return new ShortcutInfo.Builder(mContext, id)
                .setIntent(intent)
                .setShortLabel(label.toString())//就这两行代码改成一样,就不会出现闪退卡死,其他没有动
                .setLongLabel(label.toString())//就这两行代码改成一样,就不会出现闪退卡死
                .setIcon(icon)
                .build();
    }
3. 链接

蓝奏:https://wwi.lanzoup.com/b0izjk7vg 密码:52pj

现在我基本很少执行定时任务了,经常使用的就是定时报时或者语音提醒。随着时代的发展,感觉现在的手机智能化也还可以。但是还是需要使用autojs6,毕竟可以自己写代码,功能扩展性好。手机的自动化功能毕竟有限。
最后,还是希望大家理性看待脚本,认真享受生活。
这是我自己编译的版本,属于自用的。保证无毒无害。希望大家喜欢。

版本, 快捷方式

dlufjfiqnurr
OP
  

如果要使用vscode开发,需要使用AutoJs6 VSCode Extension v1.0.6,自己禁用插件更新,新版本不兼容v6.3.3
提拉米苏子冉   

感谢大佬分享
Scan   

不错的东西,收藏使用了!
HUANG125804   

感谢感谢🙏
carrey   

不错,感谢分享
pj666a   

谢谢分享,厉害👍🏻
icepyb   

感谢大佬分享
nojon   

谢谢分享
您需要登录后才可以回帖 登录 | 立即注册