Heim  >  Artikel  >  Web-Frontend  >  js implementiert die Schnittstelle, um Nachrichten an die native Schnittstelle zu senden und zur Funktion zu springen

js implementiert die Schnittstelle, um Nachrichten an die native Schnittstelle zu senden und zur Funktion zu springen

高洛峰
高洛峰Original
2016-12-05 16:10:381124Durchsuche

Das Beispiel in diesem Artikel teilt den spezifischen Code zum Senden von Nachrichten und zum Springen von der js-Schnittstelle zur nativen Schnittstelle als Referenz. Der spezifische Inhalt ist wie folgt

Schritt 1
In der Idee öffnen Wenn Sie das rn-Projekt ./Android/app verwenden, dauert dieser Vorgang eine Weile und Sie müssen möglicherweise auch Gradle-Abhängigkeiten oder ähnliches herunterladen.

Schritt 2
Es ist das Gleiche wie beim Erstellen einer nativen App. Der Einfachheit halber implementieren wir sie nur wie folgt:

public class TestActivity extends AppCompatActivity {
 
  private Button mBtGoBack;
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    mBtGoBack = (Button) findViewById(R.id.bt_go_back);
    mBtGoBack.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        finish();
      }
    });
 
  }
}

Schritt 3
Schreiben Sie eine Klasse „ExampleInterface“, die ReactContextBaseJavaModule erweitert und Nachrichten in dieser Klasse empfängt.
Spezifischer Code:

public class ExampleInterface extends ReactContextBaseJavaModule {
 
  private ReactApplicationContext mRApplicationContext;
 
  public ExampleInterface(ReactApplicationContext reactContext) {
    super(reactContext);
    mRApplicationContext = reactContext;
  }
 
  //RN使用这个名称来调用原生模块的其他函数
  @Override
  public String getName() {
    return "ExampleInterface";
  }
  //必须写@ReactMethod,将其注册为能够被React调用的函数
  @ReactMethod
  public void HandlerMessage(String aMessage){
    Log.d("lt","====receive message from RN==="+aMessage);
     //这部分实现简单的跳转
    Intent intent = new Intent(mRApplicationContext,TestActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    mRApplicationContext.startActivity(intent);
  }
 
}

Schritt 4

Implementieren Sie einen Paketmanager und registrieren Sie die Klasse „ExampleInterface“, die die Nachricht empfängt .
Der Code lautet wie folgt:

public class AnExampleReactPackage implements ReactPackage {
 
  @Override
  public List<NativeModule> createNativeModules(ReactApplicationContext reactApplicationContext) {
    List<NativeModule> modules = new ArrayList<>();
    modules.add(new ExampleInterface(reactApplicationContext));
    return modules;
  }
 
  @Override
  public List<Class<? extends JavaScriptModule>> createJSModules() {
    return Collections.emptyList();
  }
 
  @Override
  public List<ViewManager> createViewManagers(ReactApplicationContext reactApplicationContext) {
    return Collections.emptyList();
  }
}

Schritt 5
Fügen Sie die Paketverwaltungsklasse AnExampleReactPackage in MainApplication hinzu;

@Override
 protected List<ReactPackage> getPackages() {
  return Arrays.<ReactPackage>asList(
    new MainReactPackage(),
    new AnExampleReactPackage()
  );
 }

Schritt 6

Senden Sie in der js-Schnittstelle eine Nachricht


buttonPress:function(){
  NativeModules.ExampleInterface.HandlerMessage(&#39;test&#39;);
  }

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn