android - 如何从 React Native Android 模块访问 Activity?

标签 android react-native

我正在尝试将保持屏幕显示的 Android 功能过渡到 React Native。我想我可以用一个简单的模块来做到这一点,但是我不知道如何从所述模块访问当前的 Android Activity。

我需要 Activity 引用,这样我就可以调用 .getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

我试图通过像 ((Activity)getReactApplicationContext().getBaseContext()) 这样的转换来获取 Activity ,但这会引发“无法转换为 Android.app.Activity”错误

最佳答案

CustomReactPackage.java:

public class CustomReactPackage implements ReactPackage {

    private Activity mActivity = null;

    public CustomReactPackage(Activity activity) {
        mActivity = activity;
    }

    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        // Add native modules here
        return modules;
    }

    public List<Class<? extends JavaScriptModule>> createJSModules() {
        return Collections.emptyList();
    }

    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        List<ViewManager> modules = new ArrayList<>();
        // Add native UI components here
        modules.add(new LSPlayerManager(mActivity));
        return modules;
    }
}

LSPlayerManager 是我的原生 UI 组件。我定义了一个构造函数,以便我可以传入 Activity :

public LSPlayerManager(Activity activity) {
    mActivity = activity;
}

最后在 MainActivity.java 中定义了 ReactInstanceManager,我们可以将 Activity 传递给我们的自定义 React 包:

mReactInstanceManager = ReactInstanceManager.builder()
        .setApplication(getApplication())
        .setBundleAssetName("index.android.bundle")
        .setJSMainModuleName("src/index.android")
        .addPackage(new MainReactPackage())
        .addPackage(new CustomReactPackage(this)) // <--- LIKE THIS!
        .setUseDeveloperSupport(BuildConfig.DEBUG)
        .setInitialLifecycleState(LifecycleState.RESUMED)
        .build();

REACT NATIVE 0.29.0 更新

这不再是您在 native 模块中访问 Activity 的方式。见 https://github.com/facebook/react-native/releases/tag/v0.29.0迁移说明

关于android - 如何从 React Native Android 模块访问 Activity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32704336/

相关文章:

android - getChildView 未被调用

java - 安卓。记录应用程序输出的替代方法

用于 radio 流式彩信的 Android 应用程序 ://howto

java - Sqlite使用ListView插入数据

android - react native 模块中 'arm64-v8a' ,'x86_64' 上的应用程序崩溃

reactjs - react native : Unable to resolve "@ant-design/icons-react-native/fonts/antoutline.ttf"

react-native-image-picker 在 android 10 中不起作用

android - 将单个 React Native View 添加到现有 Android 应用程序的正确方法是什么?

android - 选择书签对话框的最佳实践

react-native - 在 Realm React Native 的架构中找不到对象类型 'ShortAnswer'