相关疑难解决方法(0)

如何检查服务是否在Android上运行?

如何检查后台服务(在Android上)是否正在运行?

我想要一个能够切换服务状态的Android活动 - 它可以让我打开它,如果它打开则关闭.

android android-service

900
推荐指数
17
解决办法
45万
查看次数

Android:如何获取当前前台活动(来自服务)?

是否有一种原生的android方法来从服务获取对当前运行的Activity的引用?

我有一个在后台运行的服务,我想在事件发生时(在服务中)更新我当前的Activity.有没有一种简单的方法(就像我上面建议的那样)?

service android android-activity

172
推荐指数
7
解决办法
26万
查看次数

应用程序强制停止后手动重新启用时,辅助功能服务不会重新启动

我遇到的问题是,在应用程序被强制停止然后再次手动打开后,我的辅助功能服务无法重新启动,这确实会重新启动其他常规服务。在手动重新启用(预期)、禁用并再次重新启用之前,辅助服务不会启动并再次工作 不幸的是,应用程序被杀死现在非常常见,非原生 Android 中内置了任务杀手。

概括:

  1. 强制停止应用程序会禁用辅助功能服务。这是预料之中的。当接下来使用以下代码手动打开应用程序时,我可以检测到辅助功能服务不再启用:

    public static boolean isAccessibilityServiceEnabled(Context context) {
        String prefString = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
        return prefString != null && prefString.contains(context.getPackageName());
    }
    
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我将用户发送到设置以重新启用辅助功能服务。用户重新启用无障碍服务,但无障碍服务不再启动!onCreate 不运行,onServiceConnected 不运行,未接收到辅助功能事件,以下代码将返回 false:

    public static boolean isServiceRunning(Context context, Class targetService) {
        List<ActivityManager.RunningServiceInfo> serviceInfos = getRunningServices(context);
        String targetServiceName = targetService.getName();
        for (ActivityManager.RunningServiceInfo serviceInfo : serviceInfos) {
            if(serviceInfo.service.getClassName().equals(targetServiceName)) {
                return true;
            }
        }
        return false;
    }
    
    
    Run Code Online (Sandbox Code Playgroud)
  1. 我尝试使用下面的代码手动启动该服务。这实际上会触发 onCreate 和 onStartCommand,但不会触发 onServiceConnected,并且不会收到任何辅助功能事件。

    context.startService(new Intent(context, MyAccessibilityService.class));
    
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我尝试在上面手动启动该服务后禁用该服务,以便用户被迫再次重新启用它(这将修复它),但这不起作用:

    disableSelf();
    
    
    Run Code Online (Sandbox Code Playgroud)

综上所述,用户认为自己重新启用了该服务,但并不起作用。重新启动设备或禁用该服务并再次重新启用它确实可以修复该问题。

有人知道如何解决这个问题吗?当应用程序被强制停止时,服务被禁用已经够糟糕的了,更糟糕的是,即使用户手动重新启用它也不会启动。

这是在 Android 11 上测试的。

类似问题: 如何检查辅助服务是否崩溃(Android …

service android accessibility accessibilityservice

6
推荐指数
1
解决办法
3028
查看次数