react native uses Native Module, Intent, broadcast receiver to realize mutual communication between two apps

1. React native version environment:

“react”: “18.1.0”,
“react-native”: “0.70.6”,
“node”: "14.18.2

2. Steps at the sending end:A app register a Native Module in , use to Intentconnect B app, and sendBroadcastsend a broadcast to transfer data.
(1) First create a custom native module package /android/app/src/main/java/com/judgeapp(the package name is my own project as an example), as shown in the figure below: (2) Create a custom native module, see the code for details:judgeapp
insert image description here
SendModule.java

package com.judgeapp.mymodule;

import android.widget.Toast;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

public class SendModule extends ReactContextBaseJavaModule {
   
    
    

  public SendModule(ReactApplicationContext reactContext) {
   
    
    
    super(reactContext);
  }

  @Override
  public String getName() {
   
    
    
    return "SendModule";
  }

  // 向另外一个App发送数据的代码逻辑,发送端通过 Intent连接 B app,
  @ReactMethod
  public void sendData(String data) {
   
    
    
    Intent intent = new Intent();
    intent.setAction("com.customerapp.ACTION_RECEIVE"); // 对应接收方的 receiver 广播接收器的 action
    // Log.d("judgeApp", data: " + data);
    intent.putExtra("message", data); // 在intent中添加发送数据的键值对
    intent.setPackage("com.customerapp"); // 指定另外一个App的接收Intent的应用包名
    getReactApplicationContext().sendBroadcast(intent); // sendBroadcast 发送广播
  }
} 

(3) Create a SendModulePackage.javamodule package (ReactPackage) for registering custom native modules SendModule.javainto React Native applications. code show as below:

package com.judgeapp.mymodule;
import com.judgeapp.mymodule.SendModule;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import android.util.Log;

public class SendModulePackage implements ReactPackage {
   
    
    
  private static final String TAG = "MainActivity";

  @Override
  public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
   
    
    
    return Collections.emptyList();
  }

  @Override
  public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
   
    
    
    List<NativeModule> modules = new ArrayList<>();

    modules.add(new SendModule(reactContext)); // 将自定义的原生模块添加到模块包中
    return modules;
  }

}

(4) MainApplication.javaRegister SendModulePackage.javathe module package in , the code is as follows:

package com.judgeapp;
import com.judgeapp.mymodule.SendModulePackage; // <-- 引入你自己的包

import android.app.Application;
import android.content.Context;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.config

Guess you like

Origin blog.csdn.net/qq_44094296/article/details/131378180