首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从React Native Android模块访问Activity?

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

Stack Overflow用户
提问于 2015-09-22 04:50:39
回答 7查看 56.6K关注 0票数 38

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

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

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

EN

回答 7

Stack Overflow用户

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

我猜ReactContextBaseJavaModulegetCurrentActivity()方法可以像下面的代码一样使用,它是从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
       .getCurrentActivity().getWindow().getDecorView();
      // you have access to main ui thread so you can effect
      // immediate behavior on window and decorView
    }
  });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32704336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档