Как я могу отправить событие из MainActivity.java в Javascript в React Native? - PullRequest
0 голосов
/ 03 декабря 2018

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

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

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

0 голосов
/ 03 декабря 2018

Вы можете использовать webView.addJavascriptInterface()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...