RN 與 Android 程式碼互動
如果在開發中要用到一個 RN 沒有提供的元件,或者想複用 Java 程式碼已經實現的元件而不是用 JavaScript 再造一個車輪子,或者想使用 Java 高效的處理圖片、訪問資料庫、多執行緒程式設計等,你可以使用 RN 做到 JavaScript 與 Java 非同步通訊。
這裡我們以 Android 提供的 Toast 為例。在 RN 工程裡使用 JavaScript 呼叫 Android 系統的 Toast。
首先來看一下工程目錄結構:
如上圖,我們的工程叫 Awesome。左側的是 Atom 工程,右側的是將其中的 android/app 目錄匯入 Android Studio 後的 工程。
Java 檔案包括:
- MainActivity.java;
- AwesomeReactPackage.java;
- ToastModule.java,RN 已經提供了該檔案,實際開發過程中直接引用即可,本文為了學習需要單獨寫出;
JavaScript 檔案包括:
- index.android.js;
- ToastAndroid.js。
檔案內容分別如下:
MainActivity
public class MainActivity extends Activity implements DefaultHardwareBackBtnHandler {
private ReactInstanceManager mReactInstanceManager;
private ReactRootView mReactRootView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReactRootView = new ReactRootView(this);
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName("index.android.bundle" )
.setJSMainModuleName("index.android")
.addPackage(new MainReactPackage())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
mReactRootView.startReactApplication(mReactInstanceManager, "Awesome", null);
setContentView(mReactRootView);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU && mReactInstanceManager != null) {
mReactInstanceManager.showDevOptionsDialog();
return true;
}
return super.onKeyUp(keyCode, event);
}
@Override
public void onBackPressed() {
if (mReactInstanceManager != null) {
mReactInstanceManager.onBackPressed();
} else {
super.onBackPressed();
}
}
@Override
public void invokeDefaultOnBackPressed() {
super.onBackPressed();
}
@Override
protected void onPause() {
super.onPause();
if (mReactInstanceManager != null) {
mReactInstanceManager.onPause();
}
}
@Override
protected void onResume() {
super.onResume();
if (mReactInstanceManager != null) {
mReactInstanceManager.onResume(this, this);
}
}
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new AwesomeReactPackage());
}
}
ToastModule
public class ToastModule extends ReactContextBaseJavaModule {
private static final String DURATION_SHORT_KEY = "SHORT";
private static final String DURATION_LONG_KEY = "LONG";
public ToastModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "ToastAndroid";
}
@Override
public Map<String, Object> getConstants() {
final Map<String, Object> constants = new HashMap<>();
constants.put(DURATION_SHORT_KEY, Toast.LENGTH_SHORT);
constants.put(DURATION_LONG_KEY, Toast.LENGTH_LONG);
return constants;
}
@ReactMethod
public void show(String message, int duration) {
Toast.makeText(getReactApplicationContext(), message, duration).show();
}
}
AwesomeReactPackage
public class AwesomeReactPackage implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new ToastModule(reactContext));
return modules;
}
@Override
public List<Class<? extends JavaScriptModule>> createJSModules() {
return null;
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return null;
}
}
ToastAndroid
var { NativeModules } = require('react-native');
module.exports = NativeModules.ToastAndroid;
在 index.android.js 中使用 ToastAndroid:
var ToastAndroid = require('./ToastAndroid');
ToastAndroid.show('Awesome', ToastAndroid.LONG);
下面講解各個檔案的作用。
相關推薦
RN 與 Android 程式碼互動
如果在開發中要用到一個 RN 沒有提供的元件,或者想複用 Java 程式碼已經實現的元件而不是用 JavaScript 再造一個車輪子,或者想使用 Java 高效的處理圖片、訪問資料庫、多執行緒程式設計等,你可以使用 RN 做到 JavaScript 與 Jav
React Native與Android的互動
在使用RN進行跨平臺開發的過程中,經常會設計到跨平臺呼叫相關的內容,而在於RN進行互動的時候,最核心的就是RN提供的Component和Module。 其中,Component是專門將Native的UI暴露出來供JS呼叫的,而Native Module則是將N
React Native與Android通訊互動
剛建立的React Native 微信公眾號,歡迎微信掃描關注訂閱號,每天定期會分享react native 技術文章,移動技術乾貨,精彩文章技術推送。同時可以掃描我的微信加入react-native技術交流微信群。歡迎各位大牛,React Native技術愛好者加入
Unity與Android的互動之專案結構
概述 為什麼會寫這樣的文章,原因是我們在使用Unity做開發的時候少不了跟其它平臺做互動,特別是當前流行的Android和iOS。但是由於Unity官方文件缺少這方便詳細的資料,以及每個人的開發水平也參差不齊,再加上涉及到多平臺的互動(不同平臺的開發者不甚瞭解
JS與Android原生互動
JS與Android原生互動 在專案的開發中我們會遇到android 原生與Html5的混合開發,我們可能會需要在android中呼叫js裡面的方法進行資料互動或其他的特殊處理,又或者在Html頁面呼
Unity與Android的互動,使用Android Studio匯出各Unity工程通用的Android外掛包
網上已經有很多關於Unity與Android之間的互動,教程基本都一樣,但是裡面有個都強調的重點是建立安卓工程時包名要和unity的bundle id要一致,這樣我就比較疑惑,如果一些
js 學習總結,可利用其與原生程式碼互動
js 基礎, js HTML DOM 物件的操作 js 高階教程 , js 瀏覽器 BOM js 庫 jQuery ,Prototype js 例項 js 物件例項, 瀏覽器物件例項, HTML DOM 例項 js 函式 包裹在花括號中的程式碼塊 function f
js 與 android 的互動(方法互呼叫) 和android向 js傳遞值, js向android傳引數 事件攔截看上一篇
mail_detail_v2.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewpor
Unity3D與Android專案互動中無法監聽back鍵返回的解決辦法
這兩天為解決unity3d與android專案整合中出現的無法監聽真機back實體鍵的問題找了很多資料,網上也有很多人遇到了這個問題,但是似乎都沒找到有效的解決方法。 實現的效果是從A_Activity跳轉到UnityPlayerNativeActi
從零開始實現Unity與Android的互動(一)
之前有SDK接入方面的需求,涉及到一些Unity與Android和iOS原生互動,雖然關於這方面的教程網上有不少,但第一次接觸還是遇到不少問題,這裡有很多坑與程式設計無關,很大一部分是配置不當造成的。在此記錄下來,做個備忘,也方便後來人學習。 第一步:環境搭建 下面是你需
unity與Android的互動初接觸
嵌入sdk是比較常見的吧,如接入廣告啊,新浪的分享...... 這些都需要接入sdk的,現在我們從最基本的做吧,其實這些和什麼引擎都是沒多大關係的,不管是unity,還是cosos2d......
Flutter與Android原生程式碼互動
一、概述 Flutter正式版已經出了一段時間了,作為剛入門的一個菜鳥而言,我還需要更多的學習。 最近開始的flutter專案用到了分享功能,但是到目前為止,微信,QQ等還沒有出對flutter分享的SDK,這就需要用到flutter與Android和ios的原生互動。下面僅關於fl
Android和HTML5混合開發中android程式碼與JS互動
當下HTML5非常火,使用HTML5混合開發的好處是當開發者想要修改某一個非原生頁面時,修改提交之後不用對應用進行升級發版,有人說HTML5將來將會取代原生開發,但個人感覺就目前來說這體驗感還沒完全達到原生的水平,今天做了個小Demo用於android與java
Android混合開發-(Android與Web的互動)
在Android開發中,越來越多的商業專案使用了Android原生控制元件與WebView進行混合開發,當然不僅僅就是顯示一個WebView那麼簡單,有時候還需要本地Java程式碼與HTML中的JavaScript進行互動,Android也對互動做了很好的封裝,所以很容易實現例如:點選網頁中的按鈕A
Android與HTML+JS互動
原創文章 ,首發在 http://blog.csdn.net/leejizhou/article/details/50894531李濟洲的部落格 在Android開發中,越來越多的商業專案使用了android原生控制元件與WebView進行混合開發,當然不僅僅就是顯示一個WebView那
Unity5 0與Android互動
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
java開發微信公眾號(二)--測試號申請、微信與java程式碼初步互動
一、申請測試號 個人不能夠免費申請服務號,訂閱號有很多限制,介面許可權出來基本的幾乎沒有,如圖, 在微信公眾平臺,檢視介面許可權 那麼怎麼使用服務號的介面許可權呢?微信推出了測試號,交給大家使用,開通的步驟是: 1.在微信平臺頁面,在服務號中,點選開發者文件 2
android與java web互動完成簡單的登入和註冊
本文的知識點包括android客戶端的網路程式設計、訊息機制、IO流、多執行緒和java web伺服器端的servlet、資料庫操作、javabean技術、工具類和測試類的使用。 客戶端 執行效果圖 佈局檔案 activity_main.xml <
android客戶端與伺服器端互動 如何保持session
最近在開發專案的過程中,遇到android與web伺服器要在同一session下通訊的問題。 在解決問題前先回顧下Session與Cookie: Cookie和Session都為了用來儲存狀態資訊,都是儲存客戶端狀態的機制,它們都是為了解決HTTP無狀態的問題而所做
Android Service與Activity的互動
Android中有時候需要在Service中改變Activity的UI,或者在Activity中修改Service中的數值。首先必須使用與Activity繫結的Service,有三種方式可以實現。第一,是使用介面回撥的方式在Activty中實現Service中的介面;第二,使用廣播的方式傳遞;第三,則是用觀察