试图在React Native中添加一个openFile方法,但无法调用getCurrentActivity。

5

在 react-native-fs 的一个分支中 ( https://github.com/johanneslumpe/react-native-fs ),我正在尝试添加这段代码:

public class RNFSManager extends ReactContextBaseJavaModule {

    public RNFSManager(ReactApplicationContext reactContext) {
      super(reactContext);
    }
    @ReactMethod
    public void openFile(String filepath, Callback callback) {
        try {
          File file = new File(filepath);
          MimeTypeMap myMime = MimeTypeMap.getSingleton();
          Intent newIntent = new Intent(Intent.ACTION_VIEW);
          String mimeType = myMime.getMimeTypeFromExtension(fileExt(filepath).substring(1));
          newIntent.setDataAndType(Uri.fromFile(file), mimeType);
          newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          Activity currentActivity = getCurrentActivity();
          if (currentActivity != null) {
            currentActivity.startActivity(newIntent);
          } else {
            this.getReactApplicationContext().startActivity(newIntent);
          }
        } catch (Exception ex) {
          ex.printStackTrace();
          callback.invoke(makeErrorPayload(ex));
        }
      }

但是当我构建它时,我会得到这个错误:
.../android/src/main/java/com/rnfs/RNFSManager.java:138: error: cannot find symbol
      Activity currentActivity = getCurrentActivity();
                                     ^
  symbol: method getCurrentActivity()
1 error

我认为我正在完全按照React Native核心库中的方式使用ReactContextBaseJavaModule:

https://github.com/facebook/react-native/blob/235b16d93287061a09c4624e612b5dc4f960ce47/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.java


根据源代码:https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContextBaseJavaModule.java,这应该可以工作!请确保通过检查gradle.build文件使用最新版本并对项目执行一次清理。 - Ardavan Kalhori
1个回答

3

事实证明,react-native-fs在其构建过程中具有自己的内部react-native依赖项。因此,即使整个应用程序是基于react native v0.25构建的,react-native-fs也是基于react-native v0.12构建自身的,而该版本不具有我尝试使用的API。这绝对是疯狂的。


你是如何验证 react-native-fs 正在使用不同版本的 react-native?并且你是否已经解决了这个问题?我遇到了与 react-native-linkedin-login 类似的问题。https://github.com/jodybrewster/react-native-linkedin-login - rubish
node_modules内的react-native-fs文件夹有一个package.json,其中为react-native指定了一个特定版本。我将其更改为*,并提交了PR。 - freyley
链接到PR?我遇到了同样的问题。 - Matteo Mazzarolo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接