Android: 如何在每次重启后重新启用无障碍服务?

Android: how to re-enable an accessibility service after each reboot?

我们所说的设备是一个 Android 8 主机单元,带有一个外部 USB 键盘。 好吧,我需要为这个键盘的功能键分配一些任务,例如启动某些应用程序。比如,F4 可以启动媒体播放器,F5 可以启动导航应用程序等等。 AutomateAutoInput Tasker 插件都适合此目的,但所有此类应用程序都使用 辅助功能服务 用于与物理 HID 设备交互。

这里的大问题是这个特定的 Android 设备会在(热)重启时定期终止辅助功能服务。尝试了一切,从禁用省电模式到将自动标记为 设备管理应用程序等, 没有任何帮助。所以我已经辞职了,现在我正在考虑一种替代方法,在系统因未知原因重启后禁用它后重新启用适当的辅助功能服务。

如果设备已获得 root 权限,我想会有一种简单的方法通过 shell 命令或其他任何方式重新启动辅助功能服务(只是猜测,我在 Android 方面还算新手)。但显然我想尽可能避免生根。理想的情况是在每次重启时(自动)启动一个 shell 命令/应用程序/前台服务/任何东西——这将有足够的管理权限来重新启用系统刚刚在重启期间禁用的可访问性服务。当然,所有这些东西都不需要对设备进行 root 操作。但我不确定这是否可以在 Android 上完成(在 Windows 上,系统帐户中的服务 运行 就足够了,但 Android 是另一回事) .

一个公平的解决方案可能是

  1. root 设备,
  2. 安装 shell 命令(应用程序、前台服务等)意味着在每次重新启动后重新启动辅助功能服务
  3. unroot 设备(例如使用 SuperSU)以保护用户而不会使保修失效。

有人能告诉我上述解决方案是否可以提供所需的结果吗?如果可以,我可以提供一些指导方针吗?

要实现您的目的,您应该使用 BroadcastReceiverjobIntentService

首先创建一个引导接收器

public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            MyService.enqueueWork(context, new Intent());
        }
    }

}

将其添加到 manifest

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<receiver android:name=".BootReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
</receiver>

<service android:name=".MyService"
         android:permission="android.permission.BIND_JOB_SERVICE"/>

现在您必须定义您的 jobIntent

public class MyService extends JobIntentService {

    public static final int JOB_ID = 0x01;

    public static void enqueueWork(Context context, Intent work) {
        enqueueWork(context, MyService.class, JOB_ID, work);
    }

    @Override
    protected void onHandleWork(@NonNull Intent intent) {
        // your code
    }

}

就是这样。这将直接启动服务(当 运行 在 pre-O 平台上时)或将其作为作业排队(当 运行 在 O 及更高版本上时)。无论是什么平台,你在enqueueWork中传递的一切,最终都会出现在onHandleWork中。

这里有一些有用的链接:link - link