最近的更新貌似都是跟原生有關(guān)系,
RN的瓶頸就是原生了, 最好iOS和安卓 都要會,
不過如果我iOS和安卓都很厲害 RN是不是很尷尬.....
技術(shù)不停更新吧....
小伙伴以后不要找第三方來寫這些小功能,自己動手是最快的
先來安卓吧
不會的就直接復(fù)制
先創(chuàng)建一個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調(diào)用時用到
@Override
public String getName() {
return "RNToolsManager";
}
// 聲明的方法,外界調(diào)用
@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;
}
}
}
再創(chuàng)建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
創(chuàng)建 RNToolsManager類
老辦法,不會就直接復(fù)制
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);
// 對外提供調(diào)用方法,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就不上了,也沒幾行代碼