docServiceInfo "このメソッドはいつでも呼び出すことができますが、システムがこのサービスにバインドされた後にこのメソッドを呼び出すことができます。その後呼ばれる。アクセシビリティサービスのsetServiceInfoメソッドの変更がonServiceConnectedの外で有効にならないようです
アクセシビリティは、私のアプリのために有効になっていると私はonServiceConnectedメソッド内SERVICEINFOを設定していると私はそれらのアプリケーションのためのイベントを受け付けておりますし、すべてが順調です。
問題は、onServiceConnectedメソッドの外でsetServiceInfoを呼び出すことによってパッケージリストを変更しようとしていますが、変更が有効になっていません(つまり、以前に指定したパッケージリストのパッケージからイベントを受け取ります変更されたパッケージリストには存在しません)。
@Override
protected void onServiceConnected() {
AccessibilityServiceInfo accessibilityServiceInfo = new AccessibilityServiceInfo();
accessibilityServiceInfo.packageNames = new String[]{"packageA","packageB"};
accessibilityServiceInfo.eventTypes = AccessibilityEvent.TYPE_VIEW_CLICKED | AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED
| AccessibilityEvent.TYPE_VIEW_SCROLLED | AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED
| AccessibilityEvent.TYPE_VIEW_FOCUSED | AccessibilityEvent.TYPE_VIEW_SELECTED
| AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED;
accessibilityServiceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
accessibilityServiceInfo.notificationTimeout = 100;
accessibilityServiceInfo.flags = (AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS | accessibilityServiceInfo.flags);
setServiceInfo(accessibilityServiceInfo);
}
@Override
public void onAccessibilityEvent(final AccessibilityEvent event) {
AccessibilityServiceInfo serviceInfo = getServiceInfo();
serviceInfo.packageNames = new String[]{"packageA"};
setServiceInfo(serviceInfo);
}
accessibility_service_config.xml
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:canRetrieveWindowContent="true"
android:description="@string/accessibility_service_description"
/>
だから、質問は私が後で受信アクセシビリティイベントに応じて、アクセスサービス内のパッケージを削除/追加するにはどうすればよいのですか?
おそらく私は "除外"と言ったときにはっきりしませんでした。私は説明してください。最初にonServiceConnectedのsetServiceInfoを使って設定した2つのパッケージ "packageA"と "packageB"のイベントを受け取ります。後で特定のイベントを受け取った後、私はpackageBを「除外」したいだけで、packageAからのイベントを必要とします。今度はpackageNames配列を修正してsetServiceInfoを再度呼び出すようにしましたが、packageB.Iからのイベントはまだ受け取りましたが、現在はuを提案していますが、packageBからイベントを受け取るのを邪魔してしまい、 。 –
あいまいさを避けるために質問を編集しました。 –
コードから1つの "if"ステートメントを削除すると、このような問題が発生しますか?したがって、あなたが提示したコードには何も問題はありません。それはすべて仮想的に動くはずだから、あなたのコードのどこかに、あるいはAndroidにバグがあります。私はあなたが最初にあなたのサービス情報を初期化することについてコメントして手を振ることによって、あなたが省略したコードを見ることに興味があります。つまり、これは間違いなくこのAPIの非標準的な使い方なので、あなたがAndroidにバグを見つけた可能性があるという事実を割り引かないでください。 – ChrisCM