首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >React Native:如何检测我的代码是否在模拟器中运行?

React Native:如何检测我的代码是否在模拟器中运行?
EN

Stack Overflow用户
提问于 2016-01-12 01:48:31
回答 6查看 23K关注 0票数 51

在Obj-C iOS应用程序中,我可以使用#if (TARGET_IPHONE_SIMULATOR)编写仅限模拟器的代码。

在react原生中,我可以使用:

代码语言:javascript
复制
if (__DEV__) {
 .. do something special
}

。。来检测开发模式。

我们可以使用Platform.OS === 'ios'来检测平台(Android/iOS)。有关更多信息,请参阅此处Platform Docs

但是我们如何检测应用程序是否在模拟器中运行呢?

我问的原因是我的应用程序使用摄像头来扫描条形码,而这在iOS模拟器中不受支持。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-02-21 05:55:27

使用react-native-device-info可以很容易地做到这一点,如下所示:

代码语言:javascript
复制
import DeviceInfo from 'react-native-device-info'

isSimulator() {
  // https://github.com/react-native-community/react-native-device-info#isemulator
  return DeviceInfo.isEmulator();
},
票数 86
EN

Stack Overflow用户

发布于 2016-01-12 06:07:00

我能想到的不需要创建本机模块(或修改现有模块)的最简单的解决方案是将此参数作为react组件属性传递。

在初始化RCTRootViewAppDelegate中,您可以像在常规iOS应用程序中那样检查它是否是模拟器;然后将此信息作为其initialProperties传递给react根视图

代码语言:javascript
复制
  BOOL isSimulator = NO;
#if TARGET_IPHONE_SIMULATOR
  isSimulator = YES;
#endif
  
  RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                      moduleName:@"ReactDemo"
                                               initialProperties:@{@"isSimulator": @(isSimulator)}
                                                   launchOptions:launchOptions];

现在,您可以通过react组件的道具在JavaScript中访问它:

代码语言:javascript
复制
this.props.isSimulator

在安卓上,在扩展ReactActivity的you MainActivity中,你可以使用类似的方法:

代码语言:javascript
复制
import android.os.Build;
import android.os.Bundle;

public boolean isEmulator() {
        return Build.FINGERPRINT.startsWith("generic")
                || Build.FINGERPRINT.startsWith("unknown")
                || Build.MODEL.contains("google_sdk")
                || Build.MODEL.contains("Emulator")
                || Build.MODEL.contains("Android SDK built for x86")
                || Build.MANUFACTURER.contains("Genymotion")
                || (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic"))
                || "google_sdk".equals(Build.PRODUCT);
    }

@Override
protected Bundle getLaunchOptions() {
    Bundle opts = new Bundle();
    opts.putBoolean("isEmulator", isEmulator());
    return opts;
}
票数 28
EN

Stack Overflow用户

发布于 2017-12-15 08:45:24

如果您正在构建一个CRNA/世博会应用程序,您可以使用Expo.Constants.isDevice https://docs.expo.io/versions/latest/sdk/constants/#constantsisdevice

代码语言:javascript
复制
import { Constants } from 'expo'
//....

console.log(Constants.isDevice) // => false if simulator
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34727912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档