从AccessibilityService访问本机数据

时间:2018-07-13 13:50:58

标签: react-native react-native-android accessibilityservice

目前,我有一个本机应用程序,其数据存储在其redux存储中。

我按照https://developer.android.com/guide/topics/ui/accessibility/services提供的说明创建了可访问性服务。

现在,我从Accessibility Server中的某个网站获得了数据,例如网址,并想让react-native上下文为我提供存储在其redux存储(或异步存储)中的数据。

从正在运行的react-native应用程序(js)中调用本机代码非常容易,但是您将如何实现另一种方式呢?

1 个答案:

答案 0 :(得分:0)

另一种受支持的发送信息的方法是在您已在JavaScript端订阅的本机端发出信号。

这是the docs中的示例(请参见将事件发送到JavaScript )。

在JavaScript中,订阅事件:

import { DeviceEventEmitter } from 'react-native';
...

var ScrollResponderMixin = {
  mixins: [Subscribable.Mixin],


  componentWillMount: function() {
    ...
    this.addListenerOn(DeviceEventEmitter,
                       'keyboardWillShow',
                       this.scrollResponderKeyboardWillShow);
    ...
  },
  scrollResponderKeyboardWillShow:function(e: Event) {
    this.keyboardWillOpenTo = e;
    this.props.onKeyboardWillShow && this.props.onKeyboardWillShow(e);
  },

在Java中,发送事件:

...
private void sendEvent(ReactContext reactContext,
                       String eventName,
                       @Nullable WritableMap params) {
  reactContext
      .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
      .emit(eventName, params);
}
...
WritableMap params = Arguments.createMap();
...
sendEvent(reactContext, "keyboardWillShow", params);