私はアプリケーションを作成しようとすると、BroadcastReciverを使用して携帯電話への着信コールをキャッチします。私のBroadcastReciverから、thisメソッドを使用してJSファイルにイベントとして番号を送信したいと思っています。React NativeのJavaコードからReactContextにアクセスするにはどうすればよいですか?
私はJavaコードが動作していることを確認し、呼び出しと番号をキャッチしていますが、私のアプリケーションでは、反応コンテキストがnullであることを示すエラーが発生しています。これは、アンドロイドシステムのイベントがキャッチされ、新しいインスタンスにReactContextがない場合、マニフェスト(または何か)がクラスの新しいインスタンスを作成しているためです。 JavaコードからReactContextにアクセスする方法や、ReactContextをManifest経由でBroadcastReciverに送信する方法はありますか?
これは私の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);
}
}
したがって、反応コンテキストが動作していないネイティブコンテキストの単純なラッピングは可能ですか?私はこのような意味です:ReactContext reactContext =(ReactContext)context; – MadChuckle
私はその時に働くことができませんでした。 :/私はアプリケーションの構造を変更して、非モジュールのJavaコードからネイティブコンテキストにアクセスする必要がなくなり、全く問題に遭遇することはありませんでした。私は次の時間を徹底的に試してみましょう:Dお返事ありがとう! –