簡體   English   中英

如何在 Flutter 中使用無障礙服務 - 特定於平台

[英]How to use accessibility service in Flutter - Platform Specific

我正在嘗試在基於 flutter 的應用程序中集成輔助功能服務,我深入研究它並發現我必須使用方法通道才能完成此任務,因為只有使用 android 本機代碼 (java/kotlin) 才有可能

如您所知,我們必須在 MainActivity 中編寫擴展 FlutterActivity 的代碼才能使其工作。 如何在此特定於平台的代碼中擴展 AccessibilityService?

public class MainActivity extends FlutterActivity {
  private static final String CHANNEL = "samples.flutter.dev/battery";

  @Override
  public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
  super.configureFlutterEngine(flutterEngine);
    new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
        .setMethodCallHandler(
          (call, result) -> {
            // Note: this method is invoked on the main thread.
            // TODO
          }
        );
  }
}

這是我試圖在 Flutter 中實現的代碼,還有一個問題,我是否需要從 Flutter 客戶端調用此代碼? 因為據我所知,無障礙服務代碼是由android系統自動調用的

public class MyAccessibilityService extends AccessibilityService {
...
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
    if (event.getPackageName().toString().equals("com.whatsapp")){
        StringBuilder message = new StringBuilder();
        if (!event.getText().isEmpty()) {
            for (CharSequence subText : event.getText()) {
                message.append(subText);
            }
            if (message.toString().contains("Message from")){
                name=message.toString().substring(13);
            }
        }
    }
}
    }

    @Override
    public void onInterrupt() {
    }

...
}

幾天前,我制作了一個 flutter 插件,用於與 Android 中的輔助功能服務進行交互。只需按照自述文件中的說明進行操作即可輕松使用,並查看示例以了解更多詳細信息flutter_accessibility_service

這是一個如何使用它的例子

 /// check if accessibility permession is enebaled
 final bool status = await FlutterAccessibilityService.isAccessibilityPermissionEnabled();
 
 /// request accessibility permission
 /// it will open the accessibility settings page
 await FlutterAccessibilityService.requestAccessibilityPermission();
 
 /// stream the incoming Accessibility events
  FlutterAccessibilityService.accessStream.listen((event) {
    log("Current Event: $event");
  
  /*
  Current Event: AccessibilityEvent: (
     Action Type: 0 
     Event Time: 2022-04-11 14:19:56.556834 
     Package Name: com.facebook.katana 
     Event Type: EventType.typeWindowContentChanged 
     Captured Text: events you may like 
     content Change Types: ContentChangeTypes.contentChangeTypeSubtree 
     Movement Granularity: 0
     Is Active: true
     is focused: true
     in Pip: false
     window Type: WindowType.typeApplication
)
  */
  
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM