锁定智能手机(显示为黑色)后,下一个代码在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());
}
}
}
更新
因为只有我的手机才需要这种功能,所以我找到了下一个解决方案:
选项/安全和位置/屏幕锁定/无
(选择无)
答案 0 :(得分:0)
也许是由于 Doze mode or Standby,您的服务被操作系统杀死了。
在打ze模式下,系统尝试通过限制应用程序访问网络和CPU密集型服务的方式来节省电池。
现在,作为解决方案,您可以定期检查(例如2小时之内)服务是否被终止。通过 WorkManager 实施定期任务。如果被杀死,请重启服务。