#React Native#104混合开发基础篇<2>Android
(2017-11-07 17:27:39)| 分类: 计算机相关 |
2安卓平台混合开发
private int version =
0;
public
GetBaseInfoModule(ReactApplicationContext reactContext)
{
super(reactContext);
}
@Override
@ReactMethod
PackageManager packageManager =
reactContext.getPackageManager();
try {
PackageInfo packageInfo =
packageManager.getPackageInfo(reactContext.getPackageName(),
0);
int versionCode =
packageInfo.versionCode;
String versionName =
packageInfo.versionName;
WritableMap writableMap = new
WritableNativeMap(); writableMap.putInt("apkVersionCode",
versionCode); writableMap.putString("apkVersionName",
versionName);
promise.resolve(writableMap);
} catch
(PackageManager.NameNotFoundException e) {
e.printStackTrace();
promise.reject(e.getMessage());
}
}
@Override
public List
createNativeModules(ReactApplicationContext reactContext) {
List modules = new ArrayList<>();
modules.add(new
GetBaseInfoModule(reactContext));
return modules;
}
public List>
createJSModules() {
return Collections.emptyList();
}
@Override
public List
createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
protected List getPackages()
{
new
MainReactPackage(),
new
GetBaseInfoPackage(),
2.1安卓端与原生代码的交互与IOS类似,先创建一个类,GetBaseInfoModule .java类,然后继承ReactContextBaseJavaModule类,实现RN希望调用的方法。
public class GetBaseInfoModule extends
ReactContextBaseJavaModule {
public String getName() { return "GetBaseInfo";
}
public void getApkVersion(Promise promise)
{
}
继承ReactContextBaseJavaModule
的类都要事先getName方法,返回原生代码模块名字,RN代码根据这个名字来调用该类返回的方法。@ReactMethod.而且该方法一般没有返回值,异步操作,所以只能用回调或者发送消息来实现信息互传。
最后一步是创建注册开发者编写的原生代码模块,实现一个React包管理类,继承自ReactPackage,并且要实现对应的createNativeModules方法。
public class GetBaseInfoPackage implements ReactPackage
{
}
另外,该Package 需要在 MainApplication.java
中getPacakges()方法中被创建。
@Override
return Arrays.asList(
); }
在RN中调用,则是
var {NativeModules} =
require('react-native');
const GetBaseInfoModule =
NativeModules.GetBaseInfoModule ;
GetBaseInfoModule .getApkVersion(promise);
2.2 与Android原生界面交互。
首先建立一个Empty Activity,引入布局文件,在AndroidManifest.xml
中引入对应权限控制,并且在MainActivity中增加onActivityResult方法,处理返回结果,引用上面的类,直接返回结果。
使用的方法与上面的类似,所有原生类的调用就跟直接写Java类一样。
2.3 Promise
原生端
@ReactMethod
public void aMethod(String pram,Promise promise){
try {
//处理业务逻辑
promise.resolve(msg);
} catch(Exception e){
//处理错误
promise.reject(msg);
}
}
在RN端
someManager.aMethod(param)
.then((msg) =>{
//成功处理函数})
.catch((err) =>{
//失败处理函数}
);
2.4 生命周期监听
可以在基于ReactContextBaseJavaModule 中实现ActivityEventListener
的方法。

加载中…