最近的更新貌似都是跟原生有关系,
RN的瓶颈就是原生了, 最好iOS和安卓 都要会,
不过如果我iOS和安卓都很厉害 RN是不是很尴尬.....
技术不停更新吧....
小伙伴以后不要找第三方来写这些小功能,自己动手是最快的
先来安卓吧
不会的就直接复制
先创建一个RNToolsManager 类
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.uimanager.IllegalViewOperationException;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
public class RNToolsManager extends ReactContextBaseJavaModule {
public RNToolsManager(ReactApplicationContext reactContext) {
super(reactContext);
}
// 重写getName方法声明Module类名称,在RN调用时用到
@Override
public String getName() {
return "RNToolsManager";
}
// 声明的方法,外界调用
@ReactMethod
public void getAppVersion(Callback successCallback) {
try {
PackageInfo info = getPackageInfo();
if (info != null) {
successCallback.invoke(info.versionName);
} else {
successCallback.invoke("");
}
} catch (IllegalViewOperationException e) {
}
}
// 获取 APP 信息
private PackageInfo getPackageInfo() {
PackageManager manager = getReactApplicationContext().getPackageManager();
PackageInfo info = null;
try {
info = manager.getPackageInfo(getReactApplicationContext().getPackageName(), 0);
return info;
} catch (Exception e) {
e.printStackTrace();
} finally {
return info;
}
}
}
再创建RNToolsPackage
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class RNToolsPackage implements ReactPackage {
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
@Override
public List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
// 添加一个安卓原生的activity模块
modules.add(new RNToolsManager(reactContext));
return modules;
}
}
注册自己封装
MainApplication.java
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
...
new RNToolsPackage() //添加这里
...
);
}
安卓搞定,很简单吧
接下来IOS
创建 RNToolsManager类
老办法,不会就直接复制
RNToolsManager.h文件里
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
@interface RNToolsManager : NSObject <RCTBridgeModule>
@end
RNToolsManager.m文件里
#import "RNToolsManager.h"
@implementation RNToolsManager
@synthesize bridge = _bridge;
RCT_EXPORT_MODULE(RNToolsManager);
// 对外提供调用方法,Callback
RCT_EXPORT_METHOD(getAppVersion:(RCTResponseSenderBlock)callback)
{
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];//获取项目版本号
callback(@[[NSString stringWithFormat:@"%@",version]]);
}
@end
接下来是JS端代码
import { NativeModules} from 'react-native';
NativeModules.RNToolsManager.getAppVersion((event)=>{
console.log(event);
})
没什么不懂得了吧.
Git就不上了,也没几行代码
网友评论