【问题标题】:How do I send React Application context from non react class?如何从非反应类发送反应应用程序上下文?
【发布时间】:2020-11-27 21:34:09
【问题描述】:

我需要更新 android 和 react native 类之间的事件等状态变化?

public class MessagingService extends FirebaseMessagingService {
      @Override
      public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.d(TAG, "Push Message Received ");
        buildLocalNotification(remoteMessage);
      }

      public void buildLocalNotification(RemoteMessage message) {
        ...
        FBMessagingHelper notificationHelper = new FBMessagingHelper(this.getApplication());
        notificationHelper.showNotification(bundle);
      }
    }

当类扩展为 FBMessingService 时,如何创建 ReactApplicationContext 构造函数?

FBMessagingHelper notificationHelper = new FBMessagingHelper(this.getApplication());
// Getting Error as a parameter is not react app context

我需要更新IN_VIDEO_PROGRESS状态

  1. 当视频由React Native 开始/停止时更新为Android
  2. 当视频由Android 开始/停止时更新为React Native
public class FBMessagingHelper extends ReactContextBaseJavaModule {
  private ReactApplicationContext mContext;
  private static boolean IN_VIDEO_PROGRESS = false;

  public FBMessagingHelper(ReactApplicationContext reactContext) { // Added into Native Modules
     mContext = applicationContext;
  }

@ReactMethod
    public void onVideoProgress(Bolean status){
        // ==== on videoProgress ====
        IN_VIDEO_PROGRESS = status
    }

 @Nonnull
 @Override
    public String getName() {
        return "FBMessagingHelper";
    }

  public void showCustomNotification(Bundle bundle) {
    if (!IN_VIDEO_PROGRESS && bundle.getString("category").equals("VIDEO") {
       IN_VIDEO_PROGRESS = true;
       // start FullScreenNotificationActivity
    }
  }
}

创建的原生模块:

    public class FBMessagingPackage implements ReactPackage{
    @Override
      public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new FBMessagingHelper(reactContext));
        modules.add((NativeModule) new MessagingService(reactContext));
        // Error: cannot be cast to nativeModule
        return modules;
      }
        ...
        ...
    }

【问题讨论】:

    标签: android ios reactjs react-native bridge


    【解决方案1】:

    我已经以某种方式解决了这个问题。我们不能在FirebaseMessagingService 上扩展ReactApplicationContext。即使应用程序未运行并且我们无法控制添加反应上下文,也会调用此服务。

    因此,我创建了一个单独的模块并添加了将事件数据更新到 FBMessagingHelper 类的侦听器。

    public class FBMessagingPackage implements ReactPackage{
        @Override
          public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
            List<NativeModule> modules = new ArrayList<>();
            modules.add(new VideoModule(reactContext));
            return modules;
          }
        }
    
    public class VideoModule extends ReactContextBaseJavaModule {
       private ReactApplicationContext mContext;
    
      public VideoModule(ReactApplicationContext reactContext) { // Added into Native Modules
         mContext = applicationContext;
      }
    
    @ReactMethod
        public void onVideoProgress(Bolean status){
            FBMessagingHelper.IN_VIDEO_PROGRESS = status 
            // Store it to public static variable of FBMessagingHelper
        }
    
     @Nonnull
     @Override
        public String getName() {
            return "VideoModule";
        }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 2021-01-15
      • 2021-09-26
      相关资源
      最近更新 更多