- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图创建一个应用程序,它会使用 BroadcastReciver 捕获手机的来电。从我的 BroadcastReciver 我想使用 this 将数字作为事件发送到我的 JS 文件方法。
我已经检查过我的 Java 代码是否正常工作并且正在捕获调用和号码,但是我的应用程序因提到 react 上下文为空的错误而崩溃。我猜这是因为当来自 android 系统的事件被捕获并且新实例没有 ReactContext 时, list (或其他东西)正在创建类的新实例。有什么方法可以从 Java 代码访问 ReactContext 或通过 list 将 ReactContext 发送到 BroadcastReciver?
这是我的广播接收者:
package com.bridgetest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.facebook.react.bridge.JavaScriptModule;
import android.widget.Toast;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.Arguments;
import javax.annotation.Nullable;
/**
* Created by Erik on 2016-04-06.
*/
public class BroadcastReceiverCustom extends BroadcastReceiver {
ReactContext reactContext;
public BroadcastReceiverCustom (){
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) {
// This code will execute when the phone has an incoming call
// get the phone number
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
Toast.makeText(context, "Call from:" +incomingNumber, Toast.LENGTH_LONG).show();
sendCallEvent(incomingNumber);
} else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_IDLE)
|| intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_OFFHOOK)) {
// This code will execute when the call is disconnected
Toast.makeText(context, "Detected call hangup event", Toast.LENGTH_LONG).show();
}
}
public void sendCallEvent(String incomingNumber){
WritableMap params = Arguments.createMap();
params.putString("Number", incomingNumber);
sendEvent("CallRecevied", params);
}
private void sendEvent(String eventName,
@Nullable WritableMap params) {
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}
}
最佳答案
由于 Fury 的解决方案在广播接收器中对我不起作用(getApplication() 出现“找不到符号”),我尝试应用类似的逻辑,我知道这是有效的。所以:
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.ReactApplication;
...
// context - is the context you get from broadcastreceivers onReceive
ReactApplication rnApp = (ReactApplication) context.getApplicationContext();
rnApp.getReactNativeHost().getReactInstanceManager()
.getCurrentReactContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit("test", Arguments.createMap());
这对我有用。
关于java - 如何在 React Native 中从 Java 代码访问 ReactContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716199/
当我收到一条短信时,我正在尝试发送一条消息以做出原生 react 。我真的需要帮助,但我不知道自己做错了什么! 这是我创建的模块,用于管理发送事件以响应 native 。 public class S
我想从 ReactNative 代码开始我的服务。 这是我用来桥接的模块。 public class HeartbeatModule extends ReactContextBaseJavaModul
我正在尝试在 React-Native 中运行后台服务。据我所知,我需要用原生 Java 编写它并将其连接到 react-native 代码。当我尝试发出事件时出现错误: Tried to acces
我需要通过以下方式在 MainActivity 的 onCreate 函数中调用 native 模块:context.getNativeModule(RNBackgroundToForegroundS
由于 React-Native AppState API 仅适用于 iOS,因此我正在为我的应用程序的 Android 端编写一个 appState 事件发射器。在 Java 端的应用程序 MainA
我试图创建一个应用程序,它会使用 BroadcastReciver 捕获手机的来电。从我的 BroadcastReciver 我想使用 this 将数字作为事件发送到我的 JS 文件方法。 我已经检查
我想使用方法sendEvent(),但是如何获取ReactContext reactContext? private void sendEvent(ReactContext reactContext,
我想在 MyCustomModuleClass 中调用一个方法,从另一个类扩展 ReactContextBaseJavaModule MyCustomModule.java public class
我是一名优秀的程序员,十分优秀!