【问题标题】:How can I send an event from MainActivity.java to Javascript in React Native?如何在 React Native 中将事件从 MainActivity.java 发送到 Javascript?
【发布时间】:2018-12-03 03:58:10
【问题描述】:

目前,以下代码确实成功获取了正在共享到应用程序的文本,但我无法找出如何将此事件发送到 Javascript 端。我尝试创建一个新的NavigationReactGateway,但我的应用程序崩溃了。我是 Java 新手,所以我什至不知道我是否做得对。

public class MainActivity extends SplashActivity {

    /**
     * Returns the name of the main component registered from JavaScript.
     * This is used to schedule rendering of the component.
     */
    protected String getMainComponentName() {
        return "MyApplication";
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        String action = intent.getAction();
        String type = intent.getType();

        if (Intent.ACTION_SEND.equals(action) && type != null) {
            if ("text/plain".equals(type)) {
                handleSendText(intent);
            }
        }
    }

    void handleSendText(Intent intent) {
        String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);

        if (sharedText != null) {
            // Send event to Javascript as "share" event
        }
    }
}

将此事件发送到 Javascript 的正确方法是什么?

该应用程序有react-native-navigation 并且有很多对事件发射器的引用,我只是不确定如何获取反应上下文来发射事件。如果这有任何意义。

【问题讨论】:

    标签: java android react-native android-intent react-native-navigation


    【解决方案1】:

    我能够将handleSendText 方法修改为以下以发送事件。

    private void handleSendText(Intent intent) {
        String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
    
        if (sharedText != null) {
            ReactContext context = NavigationApplication.instance.getReactGateway().getReactContext();
    
            if (context != null) {
                WritableMap params = Arguments.createMap();
                params.putString("event", sharedText);
    
                context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                    .emit("share", params);
            }
        }
    }
    

    我还必须从使用onCreate 方法更改为使用onStop,然后react 上下文已初始化,并且无论应用程序是否已打开,我的事件都会启动。

    【讨论】:

      【解决方案2】:

      你可以使用webView.addJavascriptInterface()

      您可以找到文档here

      【讨论】:

      • React Native 似乎已经在原生和 Javascript 之间架起了一座桥梁。我正在尝试使用已有的资源来完成此任务。
      猜你喜欢
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 2021-10-13
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      相关资源
      最近更新 更多