Как я могу отправить событие из MainActivity.java в Javascript в React Native?

В настоящее время следующий код успешно получает текст, который передается приложению, но мне не удается узнать, как отправить это событие на сторону 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, и есть много ссылок на эмиттер событий, я просто не уверен, как получить контекст реакции для генерации события. Если в этом есть смысл.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
1 227
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Можно использовать webView.addJavascriptInterface()

Вы можете найти документацию здесь.

В React Native уже есть мост между нативным и Javascript. Я пытаюсь использовать для этого то, что у меня уже есть.

Jared 03.12.2018 14:27
Ответ принят как подходящий

Мне удалось изменить метод 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, затем контекст реакции был инициализирован, и мое событие запускается независимо от того, было ли приложение уже открыто или нет.

Другие вопросы по теме