24

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

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

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


ARC Beta 文档中的建议不起作用:

如果您需要检查您的应用程序是否在 Chrome OS 上运行,请查找chromium作为android.os.Build.BRANDand android.os.Build.MANUFACTURER

两者都在华硕 Chromebook 上返回谷歌。

4

4 回答 4

26

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

context.getPackageManager().hasSystemFeature("org.chromium.arc.device_management");
于 2016-10-04T02:47:37.850 回答
8

谷歌在他们自己的代码(更新链接)中使用的另一种方法是检查是否Build.DEVICE以“ _cheets”结尾。我不知道像这样结束设备名称是某种长期策略还是一种快速的解决方法,但除了 dex 提出的解决方案之外,它也值得一看。

FWIW,由于 ARCWelder 的方法已被弃用,并且还没有关于此的官方文档(还没有),我还在XDA 论坛中开始讨论,供人们讨论哪些在各种设备上有效/无效。

更新 5/18: 看起来上面的代码已被移动和更新,所以谷歌截至 2018 年 5 月的新 ARC 检查在这里,特别是在这一点:

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

其中定义ARC_DEVICE_PATTERN_

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

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

20 年 8 月 26 日更新——截至 7 个月前,源已从FormFactors.java. FeatureSupport.java如果您正在寻找它的去向 -这里是今天的代码

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

测试保持不变。

于 2017-07-02T08:40:11.387 回答
1
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_PC)) 
   // it's a chromebook
于 2017-12-22T23:21:53.667 回答
0

我在Android CTS 代码中找到了解决方案。

public static boolean isArc(@NonNull Context context) {
    PackageManager pm = context.getPackageManager();
    return pm.hasSystemFeature( "org.chromium.arc" ) || pm.hasSystemFeature( "org.chromium.arc.device_management" );
}
于 2021-10-14T03:59:59.887 回答