开发的app需要实现版本动态更新的功能,首先就需要获取app的版本号。
1.Platform.version
看了下返回的数据是 21 ,类似的返回值并不是我们需要的,pass
2.react-native-device-info
我在项目里引入了这个包,也按照网上的配置都配置了,结果整个项目报错,跑不起来了。。
配置环境太难配,pass
3.修改android文件夹下的java代码,也就是react-native 桥接原生的android代码
(1)新建一个bridge文件夹
(2)新建RNBridgeManager.java
绿框中的包路径请换成自己项目里的新建bridge文件夹的路径
package com.foshan.reactnative.bridge;
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 RNBridgeManager extends ReactContextBaseJavaModule {
public RNBridgeManager(ReactApplicationContext reactContext) {
super(reactContext);
}
// 重写getName方法声明Module类名称,在RN调用时用到
@Override
public String getName() {
return "BridgeManager";
}
// 声明的方法,外界调用
@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;
}
}
}
(3)新建RNReactPackage.java
绿框中的路径注意修改
package com.foshan.reactnative.bridge;
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 RNReactPackage 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 RNBridgeManager(reactContext));
return modules;
}
}
(4)找到MainApplication.java 文件,引用新增的文件
(5)前端js,引用方法
import { NativeModules } from 'react-native'
// 获取版本号
getVerSion() {
NativeModules.BridgeManager.getAppVersion((event) => {
console.info(event)
});
}