美文网首页
react-native获取当前版本号,iOS和安卓封装代码

react-native获取当前版本号,iOS和安卓封装代码

作者: HT_Jonson | 来源:发表于2020-03-26 11:51 被阅读0次

    最近的更新貌似都是跟原生有关系,
    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就不上了,也没几行代码

    相关文章

      网友评论

          本文标题:react-native获取当前版本号,iOS和安卓封装代码

          本文链接:https://www.haomeiwen.com/subject/mcgquhtx.html