2

我在React Native上构建应用程序,我想使用Android Service NotificationListenerService。为了从服务中获取数据,我需要一台广播接收器。我如何在React Native环境中设置BroadcastReceiver?在React Native上设置Android BroadcastReceiver

+0

尝试:https://facebook.github.io/react-native/docs/headless-js-android.html –

回答

5

我所做的是使用getJSModule

MyListener.java

public class MyListener extends NotificationListenerService { 

    @Override 
    public void onNotificationPosted(StatusBarNotification sbn) { 

     if (sbn.getNotification().tickerText == null) { 
      return; 
     } 

     WritableNativeMap params = new WritableNativeMap(); 
     params.putString("tickerText", sbn.getNotification().tickerText.toString()); 
     params.putString("packageName", sbn.getPackageName()); 

     MyModule.sendEvent("notificationReceived", params); 
    } 

    @Override 
    public void onNotificationRemoved(StatusBarNotification sbn) {} 
} 

MyModule.java

public class MyModule extends ReactContextBaseJavaModule implements ActivityEventListener { 
    private static ReactApplicationContext reactContext; 

    public MyModule(ReactApplicationContext reactContext) { 
     super(reactContext); 
     this.reactContext = reactContext; 
     reactContext.addActivityEventListener(this); 
    } 

    public static void sendEvent(String event, WritableNativeMap params) { 
     reactContext 
      .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) 
      .emit(event, params); 
    } 
    ....... 
} 

检查here有关发送事件的详细信息emit事件的方式。

+0

它工作?看来我不能实例化一个WritableMap对象。 – user3348949

+0

它实际上是'WritableNativeMap'。更新了我的答案。 – vinayr

+0

我很新,反应原生,所以我不完全理解eventListeners。显然,在模块上,编译器找不到'this.reactContext'。这部分是否正确? – user3348949