react-native獲取當(dāng)前版本號,iOS和安卓封裝代碼

最近的更新貌似都是跟原生有關(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就不上了,也沒幾行代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容