これは単なるアイデアであり、完全に譲渡できない場合があります。
AccessibilityService でできることは次のとおりです。
アクセシビリティ サービスはバックグラウンドで実行され、AccessibilityEvent が発生したときにシステムからコールバックを受け取ります。このようなイベントは、フォーカスが変更された、ボタンがクリックされたなど、ユーザー インターフェイスの状態遷移を示します。
内部のイベントについて通知されますonAccessibilityEvent(AccessibilityEvent)
:
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
// Some event
timeSinceLastInteraction = System.currentTimeMillis();
}
更新を定期的にログに記録できます。
Log.i("LOG_TIME_ELAPSED", "Last user interaction was " +
((System.currentTimeMillis() - timeSinceLastInteraction) / 1000) +
" seconds ago.");
AccessibilityService を構成するには、次の 2 つの方法があります。
コードでは、onServiceConnected() 内。(API 4 以降)
xml では、meta-data
サービスでタグを使用します。(API 14 以降)
アプリケーションの場合、おそらく次のように設定できますAccessibilityServiceInfo.eventTypes
。
accessibilitySeviceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
ただし、TYPES_ALL_MASK には、AccessibilityEvent.TYPE_ANNOUNCEMENT、AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED などの通知が含まれます。これらは傍受する必要はないと思います。したがって、AccessibilityEvent.TYPE_X のサブセットを選択する必要があります。
注意すべきもう 1 つの点は、通知のタイムアウトです。
AccessibilityService が通知される前の特定のタイプの最新のイベント後のタイムアウト。
イベント通知タイムアウトは、イベントが頻繁にクライアントに伝播されるのを避けるのに役立ちます。タイムアウトは、イベントの生成がいつ落ち着いたかを判断する基準と考えることができます。
そのため、タイムアウト値には余裕を持ってください。
AccessibilityService オプションを使用する場合は、このページが非常に役立ちます:アクセシビリティ サービスの開発。
あなたのコメントからクロエの答えまで、デバイスはあなたの管理下にあるようです。つまり、ある程度、サービスを有効にするためにユーザーに頼る必要はありません。
アクセシビリティ サービスのライフサイクルは、システムによって排他的に管理され、確立されたサービス ライフサイクルに従います。さらに、アクセシビリティ サービスの開始または停止は、デバイス設定で有効または無効にする明示的なユーザー アクションによってのみトリガーされます。
展開時に AccessibilityService を有効にし、おそらくAppLockなどのアプリを使用して設定メニューへのアクセスを制限できます。
もう 1 つのオプションは、AccessibilityService が時々有効になっているかどうかを確認することです。
AccessibilityManager am = (AccessibilityManager)
getSystemService(ACCESSIBILITY_SERVICE);
List<AccessibilityServiceInfo> listOfServices =
am.getEnabledAccessibilityServiceList(
AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
for (AccessibilityServiceInfo asi : listOfServices) {
// Check if your AccessibilityService is running
}
好奇心旺盛なユーザーや悪名高いユーザーによって AccessibilityService が無効にされた場合は、次のテキストを含むフルスクリーン ビューを表示してデバイスをロックできますDevice has been locked. Contact a Sales Rep to unlock this device
。