Как в коде отличить xiaomi с MIUI и stock android
Иногда нам нужно определить производителя(manufacturer), чтобы учесть специфичную работу на его телефонах.
Мы можем обратиться к константе Build.MANUFACTURER и сравинть её со строкой(к примеру: "xiaomi").
Обычно этого достаточно, но возник вопрос, как отличить Xiaomi с MIUI от Xiaomi с Stock Android?
Нашёл следующий ответ, но он кажется не слишком надёжным, о чём не забывает упомянуть автор ответа.
Приходилось ли кому-то решать подобную задачу и как вы это сделали?
Ответы (1 шт):
Единственная проблема с приведенным кодом, в том, что он используется недокументированный класс android.os.SystemProperties
Как альтернативу можно попробовать зайти с другой стороны, скажем, при вызове Intent.ACTION_VIEW по идее будет вызываться просмотровщик, который в оболочке MIUI будет иметь сигнатуру начинающуюся с ro.miui, а в гугловской будет другая сигнатура. Сказано, сделано - лепим приблизительно такой код:
private boolean isMIUI(Context context) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setType("image/*"); //хотим как бы посмотреть картинки
//получаем список всех потенциальных обработчиков нашего вью интента
List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, MATCH_ALL);
for (ResolveInfo ri: resInfoList) {
if(ri.resolvePackageName!=null &&
ri.resolvePackageName.toLowerCase().contains("miui")
//bingo! - оболочка MIUI!
return true;
}
return false;
}