JS與Native的通信

JS與Native(Android)通信:

/**
 * Created by 80028939 on 1/10/2018.
 */

public class MainModule extends ReactContextBaseJavaModule {
    private final String MODULE_NAME = "mainModule";
    private ReactContext mContext;
    private String eventName = "nativeCallRn";
    private int type;
    private String appId;
    private String appName;

    public MainModule(ReactApplicationContext reactContext) {
        super(reactContext);
        mContext = reactContext;
    }

    @Override
    public String getName() {
        return MODULE_NAME;
    }

    /**
     * Native調用RN
     *
     * @param msg
     */
    public void nativeCallRn(String msg) {
        mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit(eventName, msg);
    }

    /**
     * DeviceEventEmitter方法傳送參數
     */
    @ReactMethod
    public void sendMsgToRN() {
        Log.e("---", "sendMsgToRN");
        nativeCallRn("hello");
    }

    /**
     * native頁面跳轉到rn 並傳數據
     */
    @ReactMethod
    public void getDataFromIntent(Callback successBack, Callback errorBack) {
        try {
            Activity currentActivity = getCurrentActivity();
            type = currentActivity.getIntent().getIntExtra("urlType", 3);
            appId = currentActivity.getIntent().getStringExtra("appID");
            appName = currentActivity.getIntent().getStringExtra("title");
            successBack.invoke("InfoDetail");
        } catch (Exception e) {
            errorBack.invoke(e.getMessage());
        }
    }


    /**
     * CallBack 方法
     *
     * @param callback:處理方法
     */
    @ReactMethod
    public void rnCallNativeCallback(Callback callback) {
        MySession mySession = new MySession(mContext);
        String session = mySession.getKeySession();
        String badge = mySession.getKeyBadge();
        JSONObject object = new JSONObject();
        try {
            object.put("session", session);
            object.put("userBadge", badge);
            object.put("appId", appId);
            object.put("type", type);
            object.put("appName", appName);
            object.put("imgUrl", "null");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        callback.invoke(object.toString());
    }

    /**
     * 實現跳轉界面
     */
    @ReactMethod
    public void rnCallbackNative() {
     /*   Intent intent = new Intent(mContext, NotificationActivity.class);
        mContext.startActivity(intent);*/
        getCurrentActivity().finish();
    }

    /**
     * 調用數據傳參
     *
     * @param callback
     */
    @ReactMethod
    public void rnCallbackIsflag(Callback callback) {

        callback.invoke("detail");
    }

    /**
     * Promise 方式
     *
     * @param msg:傳送參數
     * @param promise:Promise對象
     */
    @ReactMethod
    public void rnCallNativeFromPromise(String msg, Promise promise) {
        String result = "處理結果:" + msg;
        Toast.makeText(mContext, "Result===" + result, Toast.LENGTH_SHORT).show();
        JSONObject object = new JSONObject();
        try {
            object.put("session", "null");
            object.put("userBadge", new MySession(mContext).getKeyBadge());
            object.put("appId", appId);
            object.put("type", type);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        // 2.回調RN,即將處理結果返回給RN
        promise.resolve(object.toString());
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章