【问题标题】:How to detect programmatically if "Android App" is running in chrome book or in Android phone如何以编程方式检测“Android App”是否在 chrome book 或 Android 手机中运行
【发布时间】:2017-02-08 14:42:04
【问题描述】:

由于 Google 宣布 chromebook 也支持“Android 应用程序”,所以我也想在 chromebook 上支持我的应用程序,尽管它运行良好,几乎没有我需要修复的异常。

我想以这样一种方式编写代码,即只对 chromebook 执行,而不会在 android 手机和平板电脑上执行。

我在 android 开发者网站上查看了 Chromebook 文档,我没有得到任何这样的 API 来说明您的应用程序正在 chrome book 环境中运行。


ARC Beta documentation 的建议无效:

如果您需要检查您的应用是否在 Chrome 操作系统上运行,请查找 chromium 作为 android.os.Build.BRANDandroid.os.Build.MANUFACTURER

在华硕 Chromebook 上都返回 google

【问题讨论】:

  • 完成;显然已经有一个标签。我删除了我的答案并将在那里尝试的内容编辑到了问题中。祝你好运。

标签: android chromebook androidappsonchromeos


【解决方案1】:

最后我想出了一种方法来知道应用程序是否在 ARC 中运行:

context.getPackageManager().hasSystemFeature("org.chromium.arc.device_management");

【讨论】:

  • 任何人都可以使用 chromebook 来确认这一点吗?您确定最终将 Android 应用程序原生集成到 chromebook 中会以同样的方式使用 ARC 吗?
  • @TSGames 是的,我已经确认了它并且它按预期工作。使用的设备:Google Pixel Chromebook
  • 谢谢!我正在海尔 E11 Chromebook 中尝试它,并且也可以使用 :)
  • @Gabor 是的,它正在处理我拥有的旧像素。我不确定 Google 最近推出的新 Google 像素 Chromebook。
  • 我正在使用带有 Kiosks 模式的 chrome os,并且我已经应用了上面的所有代码,但找不到它是否是 crome box。请帮帮我。我需要为 chrome os kiosk 模式打开应用内键盘。注意:- 我没有使用 ARC Welder
【解决方案2】:

另一种方法Google uses in their own code(更新link)是检查Build.DEVICE是否以“_cheets”结尾。我不知道像这样结束设备名称是某种长期策略还是一种快速的解决方法,但除了 dex 提出的解决方案之外,它也值得一看。

FWIW,由于 ARCWelder 的方法已被弃用,并且(目前)还没有官方文档,我还在 XDA 论坛中started a discussion 供人们讨论在各种设备上有效/无效的方法。

5/18 更新:上面的代码似乎已被移动和更新,因此 Google 于 2018 年 5 月的新 ARC 检查是here,尤其是在这一点上:

... } else if (Build.DEVICE != null && Build.DEVICE.matches(ARC_DEVICE_PATTERN)) {
  mFormFactor = FORM_FACTOR_ARC;
} else { ...

其中ARC_DEVICE_PATTERNdefined

private static final String ARC_DEVICE_PATTERN = ".+_cheets|cheets_.+";

所以它不仅仅是一个以_cheets 结尾的设备。它也可以以cheets_ 开头。

2020 年 8 月 26 日更新 -- 截至 7 个月前,源已从 FormFactors.java 移动到 FeatureSupport.java。如果您正在寻找它的去向-here it the code as of today.

  public static boolean isArc() {
    return (Build.DEVICE != null && Build.DEVICE.matches(".+_cheets|cheets_.+"));
  }

测试保持不变。

【讨论】:

  • 有什么方法可以对颤振做同样的思考
  • 如何指示 chromebook 处于平板电脑模式(翻转)。因为看起来平板模式下的 chromebook 的行为就像普通的平板电脑
【解决方案3】:
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_PC)) 
   // it's a chromebook

【讨论】:

  • “官方”方式已经过时。例如,最新的 Pixelbook 品牌是“google”
  • FEATURE_PC 在 PackageManager 中找不到
  • @uday-nayak 您尝试使用哪款 Chromebook 以及它运行的 Android 操作系统版本是什么?
【解决方案4】:

我在Android CTS code找到了解决方案。

public static boolean isArc(@NonNull Context context) {
    PackageManager pm = context.getPackageManager();
    return pm.hasSystemFeature( "org.chromium.arc" ) || pm.hasSystemFeature( "org.chromium.arc.device_management" );
}

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 2010-12-10
  • 2011-04-14
相关资源
最近更新 更多