在锁定的Android上没有来自AccessibilityService的回调

时间:2018-07-24 06:00:29

标签: android

锁定智能手机(显示为黑色)后,下一个代码在Android 8.1中停止工作

仅在手机解锁时有效

在Android 8.0中,我记得下一个代码一直在工作

<service
    android:label="@string/accessibility_service_name"
    android:name=".WindowChangeDetectingService"
    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
    <intent-filter>
        <action android:name="android.accessibilityservice.AccessibilityService"/>
    </intent-filter>
    <meta-data
        android:name="android.accessibilityservice"
        android:resource="@xml/accessibilityservice"/>
</service>

我的AccessibilityService类

public class WindowChangeDetectingService extends AccessibilityService {

    @Override
    protected void onServiceConnected() {
        super.onServiceConnected();

        //Configure these here for compatibility with API 13 and below.
        AccessibilityServiceInfo config = new AccessibilityServiceInfo();
        config.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
        config.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
        config.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;

        setServiceInfo(config);
    }

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
            if (event.getPackageName() != null && event.getClassName() != null) {
                ComponentName componentName = new ComponentName(
                        event.getPackageName().toString(),
                        event.getClassName().toString()
                );
                Log.i("Component", componentName.flattenToShortString() + " " + componentName.getShortClassName());
            }
        }
    }

更新

因为只有我的手机才需要这种功能,所以我找到了下一个解决方案:

  

选项/安全和位置/屏幕锁定/无

(选择

1 个答案:

答案 0 :(得分:0)

也许是由于 Doze mode or Standby,您的服务被操作系统杀死了。

  

在打ze模式下,系统尝试通过限制应用程序访问网络和CPU密集型服务的方式来节省电池。

现在,作为解决方案,您可以定期检查(例如2小时之内)服务是否被终止。通过 WorkManager 实施定期任务。如果被杀死,请重启服务。