React-native 橋接Android原生開發

weixin_34321977發表於2018-01-12

在開發RN的漫漫長河中,早晚有那麼一天要接觸到安卓的原生開發,筆者來介紹一下其中的酸甜苦辣.對於一個不懂android的小白來說,剛開始有點難,不過都是萬事開頭難.語言是想通的,原理也是大徑若一.


1043684-32961b3d94dc09a5.png
1.png

開發過程中是要整合高德的導航功能,沒有找到好的輪子的,只要寫原生程式碼,然後在用JS去呼叫原生的導航模組.

首先註冊模組

其意義在與將類註冊到RN中,才能用JS去呼叫

public class AnExampleReactPackage implements ReactPackage {
    @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 NaviActivity(reactContext));
        return modules;
    }
}

其中modules.add(new NaviActivity(reactContext));意義就是新增一個安卓原生的activity模組
這個模組可以定義方案,RN可以直接呼叫(方法上必須宣告瞭@ReactMethod才可以)

    @ReactMethod
    public void showFengMap(String mapID){
        Activity currentActivity = getCurrentActivity();
        Intent intent = new Intent(currentActivity, 頁面名.class);
        currentActivity.startActivity(intent);
    }

筆者其中的到嗎是跳轉到其他頁面,這裡也可以做一些其他的操作.例如直接去分享

宣告

在安卓程式的app內的MainApplication內,

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

加入剛剛註冊過的包名

JS呼叫原生程式碼

import { NativeModules } from 'react-native';

export default NativeModules.NaviActivity;

筆者這裡寫了一個untils/CommonAndroidUntils.js,在需要用的頁面直接引入這個js檔案

CommonAndroidUntils.show();

實現跳轉.

整合高德導航

對於一個小白直接去在android studio內整合高德地圖剛開始還是有點難度的.不過理解之後感覺還好.簡單些一下遇到的問題,提醒自己,幫助他人

直接拖入的.jar語音包不能引入

解決辦法是右鍵.jar包,有將.jar引入的選項點選,等待同步即可.
其餘的都是些小問題,根據demo以及文件輕鬆解決的不值一提了.

相關文章