Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android辅助功能服务突然停止触发事件_Java_Android_Whatsapp_Accessibilityservice - Fatal编程技术网

Java android辅助功能服务突然停止触发事件

Java android辅助功能服务突然停止触发事件,java,android,whatsapp,accessibilityservice,Java,Android,Whatsapp,Accessibilityservice,我有一个AccessibilityService,它工作得很好,但在开发过程中由于某种原因它停止了工作。我似乎找不到那个原因。请看一下我的代码,告诉我为什么它不工作 public class MyServicee extends AccessibilityService { public static final String TAG = "volumeMaster"; @TargetApi(Build.VERSION_CODES.KITKAT) @RequiresApi(api = Bui

我有一个AccessibilityService,它工作得很好,但在开发过程中由于某种原因它停止了工作。我似乎找不到那个原因。请看一下我的代码,告诉我为什么它不工作

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();
}

}
公共类MyService扩展了AccessibilityService{
公共静态最终字符串TAG=“volumeMaster”;
@TargetApi(Build.VERSION\u code.KITKAT)
@RequiresApi(api=Build.VERSION\u CODES.JELLY\u BEAN)
@凌驾
AccessibilityEvent上的公共无效(AccessibilityEvent事件){
列出事件文本;
Log.v(标记为“******onAccessibilityEvent”);
final int eventType=event.getEventType();
开关(事件类型){
案例可访问性事件类型\窗口\状态\已更改:
打破
}
if(event.getEventType()==AccessibilityEvent.TYPE\u视图\u单击){
}
}
私有字符串processUSSDText(列表事件文本){
for(字符序列:eventText){
String text=String.valueOf(s);
如果(真){
返回文本;
}
}
返回null;
}
@凌驾
在中断时的公共无效(){
Log.v(标记为“******onInterrupt”);
}
@TargetApi(Build.VERSION\u code.JELLY\u BEAN)
@凌驾
服务连接()上的公共无效{
Log.v(标记为“****onServiceConnected”);
AccessibilityServiceInfo=getServiceInfo();
info.eventTypes=
AccessibilityEvent.TYPE\通知\状态\已更改
|AccessibilityEvent.TYPE\u视图\u已单击
|AccessibilityEvent.TYPE\u WINDOW\u STATE\u已更改;
info.feedbackType=可访问性服务info.FEEDBACK\u通用;
info.packageNames=新字符串[]{“com.whatsapp”};
info.flags=AccessibilityServiceInfo.FLAG\包含\不\重要\视图;
设置服务信息(信息);
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" />


代码尝试检测用户何时启动了呼叫记录服务。

您的配置存在一些问题:

首先,在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文件中的类似行完成的。省略它就行了,如果你不能省略它,那么你的配置就有问题了,尽管这之外的一切看起来都很好

现在,说到让您的服务配置xml文件自己说话,让我们在这里讨论几行:

android:notificationTimeout="1"
1毫秒的通知超时基本上毫无价值

android:packageNames="com.whatsapp"
是否确实要将可访问性事件仅限于一个应用程序

android:settingsActivity="@string/app_name"
这对于
settingsActivity
属性是绝对无效的值。设置活动应该是应用程序中活动类的名称。例如:
com.yourpackage.SettingsActivity
。可以安全地忽略此属性


除了这些信息之外,在完全过时的状态下获得可访问性服务是相当容易的。在后台运行一个守护进程服务,使您的服务保持启动状态,但实际上不做有成效的事情。解决此问题的唯一方法是重新启动设备。有时你甚至必须卸载软件包,然后重新启动设备,然后重新安装软件包。

谢谢你的重播。…@Chris CM………但问题是,当代码引发异常时,服务会在应用程序不幸停止后的12秒钟内正常工作。所以给我一些建议。如果你的服务抛出异常,你应该在你的问题后发布一个stacktrace。没有比stacktrace更能帮助调试问题的信息了。您找到解决此问题的方法了吗?