gpt4 book ai didi

java - AccessibilityService 在重启时停止接收事件

转载 作者:行者123 更新时间:2023-11-30 09:22:25 26 4
gpt4 key购买 nike

我有一个应用程序使用无障碍服务来收听通知。它可以正常工作,直到用户重新启动。如果您重新启动,则必须从辅助功能服务菜单中禁用/重新启用该服务。

为什么 App 重启后收不到事件?

@Override
protected void onServiceConnected() {
pMan = new PreferencesManager(this);
bulbManager = new BulbManager(((Context) this), pMan.getBridge());
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
info.notificationTimeout = 100;
info.feedbackType = AccessibilityEvent.TYPES_ALL_MASK;
setServiceInfo(info);
Log.d("OMG, STARTED FINALLY!", "RIGHT NOW!");
}

和 xml

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeNotificationStateChanged"
android:packageNames="com.t3hh4xx0r.huenotifier"
android:accessibilityFeedbackType="feedbackAllMask"
android:notificationTimeout="100"
android:accessibilityFlags="flagDefault"
android:settingsActivity="com.t3hh4xx0r.huenotifier.activities.LoadingSplashActivity"
android:canRetrieveWindowContent="false"
android:description="@string/app_name" />

和 list

   <service
android:name="com.t3hh4xx0r.huenotifier.MyAccessibilityService"
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/service_info" />
</service>

最佳答案

我遇到了同样的问题。经过大量尝试后,我发现旧版本的 android(例如 Jellybean)会出现此问题。当设备关闭时,服务将被解除绑定(bind)。但它不会重新绑定(bind) on_Boot_Completed。由于这个问题没有出现在较新版本的 android 上,我认为它是一个 android 错误。因为重新激活服务的唯一方法是关闭并重新启动服务,所以我使用 sharedPreference 来跟踪我的服务状态。当 onUnbind onRebindonServiceConnected 被调用时,我用我为它关联的值更新我的 sharedPreference。现在,在使用服务之前,我会检查服务是否调用了 onRebindonServiceConnected,如果没有,我会告诉用户重新启动服务或开始使用我的服务。

如果你很困惑,那么你可以在你的无障碍服务中包含下面的代码。

public static String AccessibilityPreference="AccessibilityPreference";
public static String isServiceBinded="isServiceBinded";
@Override
public void onServiceConnected() {
Log.e(TAG, "ACC::onServiceConnected:************************* ");
SharedPreferences p=getSharedPreferences(AccessibilityPreference,Context.MODE_PRIVATE);
SharedPreferences.Editor e=p.edit();
e.putBoolean(isServiceBinded,true);
e.commit();
}
@Override
public boolean onUnbind(Intent intent) {
Log.e("onUnbind","onUnbind Called***************************************************");
SharedPreferences p=getSharedPreferences(AccessibilityPreference,Context.MODE_PRIVATE);
SharedPreferences.Editor e=p.edit();
e.putBoolean(isServiceBinded,false);
e.commit();
return super.onUnbind(intent);
}

@Override
public void onRebind(Intent intent) {
Log.e("onRebind","onRebind Called***************************************************");
SharedPreferences p=getSharedPreferences(AccessibilityPreference,Context.MODE_PRIVATE);
SharedPreferences.Editor e=p.edit();
e.putBoolean(isServiceBinded,true);
e.commit();
super.onRebind(intent);
}
public static boolean isServiceBinded(SharedPreferences preferences){
return preferences.getBoolean(isServiceBinded,true);
}

然后在开始使用服务之前检查服务是否有效,如下所示,

if(AccessibilityWorkService.isServiceBinded(getSharedPreferences(AccessibilityWorkService.AccessibilityPreference, Context.MODE_PRIVATE))){
//start working
}else {
//tell user to restart service
}

关于java - AccessibilityService 在重启时停止接收事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16513327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com