Как программно определить, работает ли приложение 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" );
}
Другие вопросы по тегам