相关文章推荐
温暖的煎饼  ·  上海市国民经济和社会发展第十二个五年规划纲要·  1 年前    · 
瘦瘦的柳树  ·  同样都是工商企业,宾馆和酒店有什么区别?听听 ...·  1 年前    · 
踢足球的大脸猫  ·  现在的美国密苏里州时间·  1 年前    · 
豁达的帽子  ·  喜荣华正好,恨无常又到| 红楼梦中险_贾府·  1 年前    · 
想表白的烤土司  ·  Hans Wegner for ...·  1 年前    · 
小百科  ›  如何从React Native Android模块访问Activity?开发者社区
react activity
八块腹肌的冲锋衣
8 月前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

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

Stack Overflow用户
提问于 2015-09-22 04:50:39
EN

我试图跨越Android的功能,让屏幕保持在React Native上。我想我可以用一个简单的模块来做这件事,但是我不知道如何从这个模块访问当前的Android活动。

我需要活动引用,以便可以对其调用 .getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

我试图通过像这样的 ((Activity)getReactApplicationContext().getBaseContext()) 类型转换来获取活动,但这抛出了一个"cannot be cast to Android.app.Activity“错误

7 56.6K 0 票数 38
EN
android
react-native

回答 7

Stack Overflow用户

发布于 2016-03-30 22:03:48

我猜 ReactContextBaseJavaModule 的 getCurrentActivity() 方法可以像下面的代码一样使用,它是从 React-Native 的原始代码复制过来的;

代码语言: javascript
复制
import android.app.Activity;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
public class AwesomeModule extends ReactContextBaseJavaModule {
  public AwesomeModule(ReactApplicationContext reactContext) {
    super(reactContext);
  @Override
  public String getName() {
    return "AwesomeAndroid";
  private static final String ERROR_NO_ACTIVITY = "E_NO_ACTIVITY";
  private static final String ERROR_NO_ACTIVITY_MESSAGE = "Tried to do the something while not attached to an Activity";
  @ReactMethod
  public void doSomething(successCallback, errorCallback) {
    final Activity activity = getCurrentActivity();
    if (activity == null) {
      errorCallback(ERROR_NO_ACTIVITY, ERROR_NO_ACTIVITY_MESSAGE);
      return;
}
票数 33
EN

Stack Overflow用户

发布于 2015-09-24 12:00:03

编辑:

问题是getReactApplicationContext()返回的是应用程序的上下文,而不是活动。不能将应用程序上下文类型转换为活动。

这是一个简单的解决方法

因为通常在react-native中只有一个活动(主活动),所以我们可以用MainActivity编写一个静态函数来返回该活动

代码语言: javascript
复制
private static Activity mCurrentActivity = null;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mCurrentActivity = this;
public static Activity getActivity(){
    Activity activity = new Activity();
    activity = mCurrentActivity;
    return activity;
}

然后从桥接模块调用 MainActivity.getActivity()

票数 8
EN

Stack Overflow用户

发布于 2020-08-12 22:33:02

使用UI线程上下文获取活动/窗口/装饰视图

在您的类文件中,导入包括...

代码语言: javascript
复制
import android.view.WindowManager;
import android.view.Window;
import android.view.View;

在你的类构造函数中...

代码语言: javascript
复制
private static ReactApplicationContext reactContext;
MyModule(ReactApplicationContext context) {
  super(context);
  reactContext = context;
}

然后在类方法中...

代码语言: javascript
复制
@ReactMethod
public void doSomethingRequiringWindow() {
  // get access to current UI thread first
  reactContext.getCurrentActivity().runOnUiThread(new Runnable() {
    @Override
    public void run() {
      Window window = reactContext
       .getCurrentActivity().getWindow();
      View decorView = reactContext
 
推荐文章
温暖的煎饼  ·  上海市国民经济和社会发展第十二个五年规划纲要
1 年前
瘦瘦的柳树  ·  同样都是工商企业,宾馆和酒店有什么区别?听听工作人员怎么说_星 ...
1 年前
踢足球的大脸猫  ·  现在的美国密苏里州时间
1 年前
豁达的帽子  ·  喜荣华正好,恨无常又到| 红楼梦中险_贾府
1 年前
想表白的烤土司  ·  Hans Wegner for Mikael Laursen ML-33 Rocking Chair For Sale at ...
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号