Ich benutze reagieren native für meine Android-App. Ich habe einen Hintergrund-Service, der auf Ereignisse in der Zwischenablage wartet. Wenn etwas, an dem die App interessiert ist, in der Zwischenablage gespeichert ist, sendet die App eine Push-Benachrichtigung an den Benutzer. Wenn die App im Hintergrund läuft, kann ich ein Ereignis ausgeben und es funktioniert perfekt. Wenn die App geschlossen und durch Antippen der Benachrichtigung gestartet wird, wird nichts ausgegeben. Reaktionskontext ist ebenfalls leer. Wie kann ich dieses Ereignis beim Start der Benachrichtigung ausgeben?Wie kann ich Ereignis beim App-Start von Benachrichtigung ausstoßen?
import android.app.Application;
import android.content.Intent;
import android.view.View;
import android.util.Log;
import android.os.Bundle;
import android.app.NotificationManager;
import android.support.v4.content.LocalBroadcastManager;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.ReactActivity;
import com.facebook.react.common.LifecycleState;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.shell.MainReactPackage;
public class MainActivity extends ReactActivity {
/**
* Returns the name of the main component registered from JavaScript.
* This is used to schedule rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "PurchaseButton";
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
onNewIntent(getIntent());
}
@Override
public void onNewIntent(Intent intent) {
setIntent(intent);
Bundle bundle = intent.getExtras();
if (bundle != null) {
String result = bundle.getString("response");
int nid = bundle.getInt("nid");
NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.cancel(nid);
ReactContext ctx = getReactInstanceManager().getCurrentReactContext();
if (ctx != null) {
ctx.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit("my.custom.event", result);
Log.d("PB", "sent broadcast..");
} else {
Log.d("PB", "react context is null...");
}
}
}
}
Ich glaube, dass Ihre Aktivität aufgrund Android Lifecycle noch nicht erstellt wurde. Hast du versucht es zu verschieben, bis deine Aktivität onResume ausführt? – Oximer
@Oximer Ich habe diesen Teil tatsächlich mit einem Handler nach onResume verschoben und ihn um eine Sekunde verschoben. So habe ich den Reaktionskontext tatsächlich gefunden. Um jedoch darauf reagieren zu können, musste ich es für fünf Sekunden einstellen. – Mengu
Jetzt funktioniert es? Ich sehe keinen einfachen Weg, es zu lösen. Eine Option besteht darin, Ihre eigene Aktivität zu verwenden und selbst eine reaktive native Instanz zu erstellen. Dafür müssen Sie ReactInstanceManager und ReactInstanceEventListener.onReactContextInitialized – Oximer