問題タブ [accessibilityservice]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
7238 参照

java - AccessibilityService.getWindows() を使用してトラバース可能な AccessibilityNodeInfo を取得するにはどうすればよいですか?

私はAccessibilityServiceAndroid 用の を書いていますが、API レベル 20 までは、トリガーされたときにAccessibilityEvent.getSource()トラバーサブルを取得するメソッドを使用しています。結果は必ずしも画面の内容を反映しているわけではありませんが、操作は可能です。AccessibilityNodeInfoonAccessibilityEvent(AccessibilityEvent event)AccessibilityNodeInfo

API レベル 21 以降、新しいAccessibilityService.getWindows()はビュー階層をより適切に表現できるようになる (つまり、Z オーダーが尊重される) だけでなく、現在のすべてのビューを含むノードを公開できるようになることも想定されています。入力方法 (IME)。これを利用したいのですが、それができず、何が間違っているのか正確にはわかりません。ちなみに、非常に最小限のJavaドキュメント以外に、これを行う方法に関する詳細な情報を見つけることができませんでした.

私はすでに次のことを行っています:

  • ウィンドウのコンテンツを取得するように構成されたサービス ( android:canRetrieveWindowContent="true")
  • flagRetrieveInteractiveWindowsサービスフラグに追加

私のコードは次のとおりです。

getNodesFromWindows() は次のことを行います。

この後、updateTargetLeafs()クリック可能で、有効で、表示されているすべてのノードを個別に収集して、自由にAccessibilityNodeInfo ArrayListインデックスを付けてアクセスできるようにします (以下を参照)。API レベル 20 以下で使用する場合AccessibilityEvent.getSource()、この配列のサイズは常に画面上のビューの数に近くなりますが、使用する場合AccessibilityService.getWindows()、サイズはほとんど常に 1 (場合によっては 0) でありAccessibilityNodeInfo、リスト内のみの境界です。常に画面の外にいます。

編集: すべてのノードの子を反復処理するためのコードを追加します (mNodesはの出力ですgetNodesFromWindows()):

奇妙なことですが、何が間違っているのでしょうか?

0 投票する
1 に答える
1016 参照

android - accessibilityservice android を使用して通知メッセージを取得する

私のAndroidアプリでは、通知の履歴を表示したいので、すべての通知のタイトルとメッセージをキャプチャしたいと考えています。私はアクセシビリティ サービスを使用しており、パーセル可能なデータを使用してタイトルを取得できますが、元のメッセージ テキストを取得できません。

理想があれば教えてください。

0 投票する
0 に答える
572 参照

android - AccessibilityService onUnbind は、エミュレーターでの実行時に常に呼び出されるわけではありません

Android 向けのアクセシビリティ サービスを開発しています。問題は、エミュレーター (Android 4.0.5 API 15) で実行している場合、サービスがオフになっているときに onUnbind が呼び出されないことがあることです。この場合、サービスを停止することはできず、apk を再インストールするか、エミュレーターを再起動する必要があります。

このアクセシビリティ サービスを実際のデバイス (Galaxy Nexus) で実行すると、問題なく動作します。この問題を再現できませんでした。

関連するサービス コードは次のとおりです。

質問:

  • 何か不足していますか?
  • これがいつ発生するかを検出できます( init() に関するコメントを参照)。サービスを強制的に停止する方法はありますか?

追加の詳細:

  • サービスにはネイティブ部分が含まれており、2 つのスレッドが生成されます
  • エミュレーターでは CPU の 100% を消費し、Galaxy Nexus では約 35% を消費します。
  • 最初に失敗した後、サービスのオンとオフを何度切り替えても、onUnbind が再度呼び出されることはありません。
0 投票する
4 に答える
13483 参照

java - アクセシビリティ サービスを使用してプログラムで通知バーのタイトル、メッセージを読み取る

アクセシビリティサービスを使用して、通知バーのタイトルとメッセージを読むことができます。直面している問題は、最初の通知が表示されたときにこれらすべてを完全に読んでいますが、最初の通知以降はタイトルとテキスト「2 つのメッセージがあります」しか表示されないことですメッセージ全体ではありません。専門家のアドバイスをお待ちしています。

コード :

通知例 1:

パッケージ: com.whatsapp、タイトル: こんにちは、メッセージ: お元気ですか

通知例 2:

パッケージ: com.whatsapp、タイトル: こんにちは、メッセージ: 2 つのメッセージがあります (代わりに: 何をしていますか)

0 投票する
2 に答える
3981 参照

android - アクセシビリティ サービス - performGlobalAction() が false を返す

でperformGlobalAction()を呼び出すAndroidアクセシビリティ サービスを作成しています。onStartCommand()

ガイドに従って、必要なアクセス許可をマニフェストに追加しました。

私の質問は、関数呼び出しが false を返す理由です。何が欠けている?ちなみに、戻るボタンを押すイベントは発生していません。

0 投票する
0 に答える
1519 参照

android - アクセシビリティ イベントから正確なタッチ データを取得することは可能ですか?

私は現在、研究に使用するグローバル タッチ ジェスチャをキャプチャできるアプリケーションを開発しようとしています。可能であれば、電話をルート化せずにこれを実現したいと考えています。これにはオーバーレイを使用できなくなったため、タッチ探索を備えたアクセシビリティ サービスを通じて実現しようとしています。

現在、ジェスチャー/タッチがあったという情報と、認識された場合は実行されたスワイプの一般的なタイプを含む AccessibilityEvents を取得できます。

AccessibilityEvents にはより具体的なデータが含まれていないのではないかと思いますが、誰かがこれに対する解決策を持っているか、それが不可能であることを確認できるかどうか知りたいです.

サービスのソースコードは次のとおりです。

出力のスニペットは次のとおりです。

0 投票する
0 に答える
505 参照

android - ユーザー補助サービスは、インストール コマンドでのインストールに時間がかかります

アプリケーションに問題がありAndroidます。基本的に、デバイスが別の に移動しようとすると、アプリケーションはイベントをキャッチしますActivity。それはペアレンタルロッカーであり、それを達成するためにAccessibility service.

のコードは次のAndroidManifest.xmlようになります。

したがって、プッシュしてから実行すると、これは適切に機能しますEclipse。新しいAccessibility serviceものがすぐに表示されます。問題は、次を使用してインストールしようとしたときです。

これにより、アプリケーションは正常にインストールされますがAccessibility service、5 ~ 10 分後にのみ表示されます。すぐに、または少なくとも迅速にする必要があります。これはsignedまたはunsignedAPK で発生します。

pm installコマンドが更新などを行っていないことはほぼ確実ですAndroid services。このアプリケーションは に展開されないPlay Storeため、このコマンド (またはadb install) を使用して配布するしかありません。

私は何か間違ったことをしましたか、それとも本当の問題ですか?

ご協力いただきありがとうございます。

編集:

これは私が実行した後に得たものですpm install:

ここに画像の説明を入力

そして、これは5〜10分後に起こることです:

ここに画像の説明を入力