Как программно определить, работает ли приложение Android в Chrome Book или в телефоне Android
Так как Google объявил, что Chromebook также поддерживает "Android-приложение", я также хотел поддержать мое приложение на Chromebook, хотя оно работает нормально, за небольшим исключением, которое мне нужно исправить.
Я хочу написать код таким образом, что он будет выполняться только для Chromebook и не будет выполняться для телефонов и планшетов Android.
Я проверил документацию по Chromebook на сайте разработчиков Android, у меня не было такого API, который сообщал бы, что ваше приложение работает в среде Chrome Book.
Предложение от ARC Beta с документацией не сработало:
Если вам нужно проверить, работает ли ваше приложение в Chrome OS, найдите хром в качестве
android.os.Build.BRAND
а такжеandroid.os.Build.MANUFACTURER
,
Оба возвращают Google на ASUS Chromebook.
4 ответа
Наконец, я выясняю способ узнать, работает ли приложение в ARC:
context.getPackageManager().hasSystemFeature("org.chromium.arc.device_management");
Другой метод, который Google использует в своем собственном коде (обновленная ссылка), заключается в проверке Build.DEVICE
заканчивается "_cheets
"Я не знаю, является ли окончание названий устройств подобным образом какой-то долгосрочной стратегией или быстрым обходным путем, но это также стоит посмотреть в дополнение к предлагаемому Dex решению.
FWIW, так как метод ARCWelder устарел и нет официальной документации по этому вопросу (пока), я также начал обсуждение на форумах XDA здесь, чтобы люди обсуждали, что работает / не работает на различных устройствах.
Обновление 5/18: похоже, что приведенный выше код был перемещен и обновлен, поэтому новая проверка Google ARC от мая 2018 года уже здесь, особенно в этом бите:
... } 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_
также.
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_PC))
// it's a chromebook
Я нашел решение в коде 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" );
}