我正在尝试将保持屏幕显示的 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/