0

Jelly bean (Android バージョン 4.1.1) を搭載した Android フォンでアクセシビリティ イベントを受信しようとしています。

この問題に対処するいくつかの質問を見てきました (特に JB と JB 以前の互換性に関して):

Android アクセシビリティ サービス検出通知

AccessibilityService は開始されていますが、JellyBean で AccessibilityEvents を受け取りません

Android アクセシビリティ サービス

Android アクセシビリティ サービスの下位互換性とジェリー ビーン

これらすべての質問(特に最後の質問)によると、下位互換性を確保したくない場合は、次の行を追加するだけです

android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"

マニフェスト ファイルに xml 構成ファイルを含めます。

これを行いましたが、通知バーに通知が投稿されたときに onAccessibilityEvent 通知を受け取ることができません。これが私のコードです

public class NotificationService extends AccessibilityService {

private static final Logger logger = LoggerFactory.getLogger ("NotificationService");

@Override
public void onCreate()
{
    super.onCreate();
    logger.trace ("onCreate");
}

@Override
public void onDestroy()
{
    super.onDestroy();
    logger.trace ("onDestroy");
}

@Override
protected void onServiceConnected() {
    logger.trace("onServiceConnected");
    AccessibilityServiceInfo info = new AccessibilityServiceInfo();
    info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
    info.notificationTimeout = 100;
    setServiceInfo(info);
}

@Override
public void onInterrupt() {
    // TODO Auto-generated method stub
}

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    logger.trace("onAccessibilityEvent");


    if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
        logger.info("notification: " + event.getText());
    }

}

}

マニフェストファイルでサービスを宣言する方法は次のとおりです

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

ここに私の accessibilityservice.xml があります

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://Schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeNotificationStateChanged"
    android:accessibilityFeedbackType="feedbackAllMask"
    android:notificationTimeout="100" />

アプリを実行すると、サービスが作成されて接続されていることがわかりますが、AccessibilityEvents は受信されません。

ありがとう!

4

2 に答える 2

1

これは Android 4.1.1 では機能しましたが、Android 4.2(Jelly Bean) では失敗しました。SDK の変更を考慮して、value-v17 フォルダーも追加する必要があります。このソリューションを確認してください https://stackoverflow.com/a/12042493/1179638

于 2013-07-10T06:44:21.300 に答える
0

私はあなたと同じ問題を抱えていました。この方法を試してください。<category android:name="android.accessibilityservice.category.FEEDBACK_SPOKEN" />インテント フィルタにを追加します。

AccessibilityService は開始されていますが、JellyBean で AccessibilityEvents を受け取りません

于 2014-09-21T08:56:03.787 に答える