如何以编程方式检测 "Android App" 在 chrome 书中或 Android phone 中是否为 运行
How to detect programmatically if "Android App" is running in chrome book or in Android phone
由于 Google 宣布 chromebook 也支持 "Android Application" 所以我也想在 chromebook 上支持我的应用程序,尽管它是 运行很好,除了少数例外,我需要修复。
我想编写的代码仅针对 chrome 书籍执行,不会针对 android 手机和平板电脑执行。
我查看了 android 开发者网站中的 Chromebook 文档,我没有得到任何这样的 API 表明您的应用在 chrome 书中是 运行环境。
ARC Beta documentation 的建议无效:
If you need to check if your app is running on Chrome OS, look for chromium as the android.os.Build.BRAND
and android.os.Build.MANUFACTURER
.
在华硕 Chromebook 上 returngoogle。
最后我想出了一个方法来知道应用程序是否在 运行 in ARC:
context.getPackageManager().hasSystemFeature("org.chromium.arc.device_management");
另一种方法Google uses in their own code (updated link)是检查Build.DEVICE
是否以“_cheets
”结尾。我不知道像这样结束设备名称是某种长期策略还是快速解决方法,但除了 dex 提出的解决方案外,它也值得一看。
FWIW,由于 ARCWelder 的方法已被弃用并且(目前)还没有官方文档,我还在 XDA 论坛中 started a discussion 供人们讨论什么 works/doesn 不起作用在各种设备上。
更新 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_PATTERN
是 defined 作为
private static final String ARC_DEVICE_PATTERN = ".+_cheets|cheets_.+";
所以它不仅仅是一个以_cheets
结尾的设备。它也可以以 cheets_
开头。
更新 8/26/20 -- 截至 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_.+"));
}
测试保持不变。
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_PC))
// it's a chromebook
我在 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" );
}
由于 Google 宣布 chromebook 也支持 "Android Application" 所以我也想在 chromebook 上支持我的应用程序,尽管它是 运行很好,除了少数例外,我需要修复。
我想编写的代码仅针对 chrome 书籍执行,不会针对 android 手机和平板电脑执行。
我查看了 android 开发者网站中的 Chromebook 文档,我没有得到任何这样的 API 表明您的应用在 chrome 书中是 运行环境。
ARC Beta documentation 的建议无效:
If you need to check if your app is running on Chrome OS, look for chromium as the
android.os.Build.BRAND
andandroid.os.Build.MANUFACTURER
.
在华硕 Chromebook 上 returngoogle。
最后我想出了一个方法来知道应用程序是否在 运行 in ARC:
context.getPackageManager().hasSystemFeature("org.chromium.arc.device_management");
另一种方法Google uses in their own code (updated link)是检查Build.DEVICE
是否以“_cheets
”结尾。我不知道像这样结束设备名称是某种长期策略还是快速解决方法,但除了 dex 提出的解决方案外,它也值得一看。
FWIW,由于 ARCWelder 的方法已被弃用并且(目前)还没有官方文档,我还在 XDA 论坛中 started a discussion 供人们讨论什么 works/doesn 不起作用在各种设备上。
更新 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_PATTERN
是 defined 作为
private static final String ARC_DEVICE_PATTERN = ".+_cheets|cheets_.+";
所以它不仅仅是一个以_cheets
结尾的设备。它也可以以 cheets_
开头。
更新 8/26/20 -- 截至 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_.+"));
}
测试保持不变。
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_PC))
// it's a chromebook
我在 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" );
}