如何从非反应 class 发送反应应用程序上下文?
How do I send React Application context from non react class?
我需要更新状态变化,例如 android 之间的事件和反应本机 class?
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);
}
}
当 class 扩展到 FBMessingService 时,如何创建 ReactApplicationContext
构造函数?
FBMessagingHelper notificationHelper = new FBMessagingHelper(this.getApplication());
// Getting Error as a parameter is not react app context
我需要更新 IN_VIDEO_PROGRESS
状态
- 当
React Native
的视频 starts/stop 时更新到 Android
。
- 当
Android
的视频 starts/stop 时更新到 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;
}
...
...
}
我已经以某种方式解决了这个问题。我们不能在 FirebaseMessagingService
上扩展 ReactApplicationContext
。即使应用程序不是 运行 并且我们无法控制添加反应上下文,也会调用此服务。
所以我创建了一个单独的模块并添加了将事件数据更新到 FBMessagingHelper 的侦听器 class。
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";
}
}
我需要更新状态变化,例如 android 之间的事件和反应本机 class?
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);
}
}
当 class 扩展到 FBMessingService 时,如何创建 ReactApplicationContext
构造函数?
FBMessagingHelper notificationHelper = new FBMessagingHelper(this.getApplication());
// Getting Error as a parameter is not react app context
我需要更新 IN_VIDEO_PROGRESS
状态
- 当
React Native
的视频 starts/stop 时更新到Android
。 - 当
Android
的视频 starts/stop 时更新到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;
}
...
...
}
我已经以某种方式解决了这个问题。我们不能在 FirebaseMessagingService
上扩展 ReactApplicationContext
。即使应用程序不是 运行 并且我们无法控制添加反应上下文,也会调用此服务。
所以我创建了一个单独的模块并添加了将事件数据更新到 FBMessagingHelper 的侦听器 class。
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";
}
}