React Native onActivityResult不起作用

sha*_*iao 5 android webview react-native

我有一个React Native的webview组件.webview应该支持输入类型是文件,所以我这样做:

WebView中的文件上载

并且webview实现ActivityEventListener并覆盖onActivityResult.But onActivityResult不起作用.

守则是

class RNWebView extends WebView implements ActivityEventListener {
      protected class GeoWebChromeClient extends WebChromeClient {
          public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
           ...
            mActivity.startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE);
            return true;
          }
      }

    public RNWebView(ReactContext reactContext, Activity activity) {
        super(reactContext);
        // Add the listener for `onActivityResult`
        reactContext.addActivityEventListener(this);
        ...
     }

@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent intent) {
    // Your logic here
    Log.d("Tanck", "requestCode:" + requestCode + "----" + "resultCode:" + resultCode);
}

}
Run Code Online (Sandbox Code Playgroud)

osc*_*cat 12

也许迟到希望它有所帮助.

本机模块的onActivityResult调用由ReactContext被称为通过ReactInstanceManagerImpl其在0.29被称为ReactActivity.在上面的示例中,不MyWb扩展Activity ReactActivity,因此ReactInstanceManagerImpl永远不会调用.

解决方案就在您的活动onActivityResult调用中ReactInstanceManager, onActivityResult因为您已经拥有自己的ReactInstanceManager对象引用.

您正在启动React Native的活动应该具有如下覆盖:

// Manually pass along the `onActivityResult` event to React Native event listeners.
// We are not extending from `ReactActivity` so we need to do this manually.
// 
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

  mReactInstanceManager.onActivityResult( this, requestCode, resultCode, data );

}
Run Code Online (Sandbox Code Playgroud)