2017-09-28 49 views
2

我有一个AccessibilityService工作正常,但由于某种原因在开发过程中停止工作。我似乎无法找到原因。请看看我的代码,并告诉它为什么不起作用。android辅助功能服务突然停止触发事件

public class MyServicee extends AccessibilityService { 

public static final String TAG = "volumeMaster"; 

@TargetApi(Build.VERSION_CODES.KITKAT) 
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) 
@Override 
public void onAccessibilityEvent(AccessibilityEvent event) { 

    List<CharSequence> eventText; 

    Log.v(TAG, "***** onAccessibilityEvent"); 

    final int eventType = event.getEventType(); 

    switch (eventType) { 

     case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED: 

      break; 
    } 

    if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_CLICKED) { 

    } 



} 

private String processUSSDText(List<CharSequence> eventText) { 
    for (CharSequence s : eventText) { 
     String text = String.valueOf(s); 
     if (true) { 
      return text; 
     } 
    } 
    return null; 
} 

@Override 
public void onInterrupt() { 
    Log.v(TAG, "***** onInterrupt"); 
} 


@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
@Override 
public void onServiceConnected() { 
    Log.v(TAG, "***** onServiceConnected"); 

    AccessibilityServiceInfo info = getServiceInfo(); 
    info.eventTypes = 
      AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED 
        | AccessibilityEvent.TYPE_VIEW_CLICKED 
        | AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED; 

    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; 
    info.packageNames = new String[]{"com.whatsapp"}; 
    info.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; 
    setServiceInfo(info); 
    super.onServiceConnected(); 
} 

} 

下面的清单的相关部分:

<service android:name=".MyServicee" 
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" 
     android:enabled="true"> 
     <intent-filter> 
      <action android:name="android.accessibilityservice.AccessibilityService" /> 
     </intent-filter> 
     <meta-data android:name="android.accessibilityservice" 
      android:resource="@xml/myservice" /> 
    </service> 

这里的myserviceconfig.xml:

<accessibility-service 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:accessibilityEventTypes="typeViewClicked|typeNotificationStateChanged|typeWindowStateChanged" 
android:accessibilityFeedbackType="feedbackAllMask" 
android:canRetrieveWindowContent="true" 
android:accessibilityFlags="flagIncludeNotImportantViews|flagRequestFilterKeyEvents" 
android:notificationTimeout="1" 
android:packageNames="com.whatsapp" 
android:settingsActivity="@string/app_name" /> 

代码试图在用户已经开始了电话录音服务来检测。

回答

0

有几个问题,你的配置:

首先在你的onServiceConnected功能,您覆盖系统构建的可访问性信息。

AccessibilityServiceInfo info = getServiceInfo(); 
info.eventTypes = 
     AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED 
       | AccessibilityEvent.TYPE_VIEW_CLICKED 
       | AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED; 

info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; 
info.packageNames = new String[]{"com.whatsapp"}; 
info.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; 
setServiceInfo(info); 
super.onServiceConnected(); 

这整个的代码块是不必要的,全部由在serviceConfig XML文件中的类似的线来完成。只要省略它,如果你不能忽略它,那么你的配置就有问题,尽管这些之外的一切似乎都没有问题。现在

,让你的service_config XML文件的发言为自己说话,让我们来谈谈几行这里:

android:notificationTimeout="1" 

1 ms的通知超时基本上是毫无价值的。

android:packageNames="com.whatsapp" 

您是否真的想将可访问性事件限制为只有一个应用程序?

android:settingsActivity="@string/app_name" 

对于settingsActivity属性,这是绝对无效的值。设置活动应该是应用程序中活动类的名称。 EX:com.yourpackage.SettingsActivity。该属性可以安全省略。

除了这些信息之外,在完全陈旧的状态下获得无障碍服务相当容易。有一个守护进程服务,在后台运行,保持你的服务形式开始,但不实际上做生产性的事情。解决此问题的唯一方法是重新启动您的设备。有时甚至需要卸载软件包,然后重新启动设备,然后重新安装软件包。

+0

感谢您的重播..... @ Chris CM ..........但问题是,当代码抛出一个异常时,Service在12秒内完美工作,在whats-app不幸停止之后。所以给我一些建议。 – Secret

+0

如果你的服务抛出一个异常,你应该在你的问题中发布堆栈跟踪。没有任何信息比堆栈跟踪更有助于调试问题。 – ChrisCM