Как в коде отличить xiaomi с MIUI и stock android

Иногда нам нужно определить производителя(manufacturer), чтобы учесть специфичную работу на его телефонах.

Мы можем обратиться к константе Build.MANUFACTURER и сравинть её со строкой(к примеру: "xiaomi").

Обычно этого достаточно, но возник вопрос, как отличить Xiaomi с MIUI от Xiaomi с Stock Android?

Нашёл следующий ответ, но он кажется не слишком надёжным, о чём не забывает упомянуть автор ответа.

Приходилось ли кому-то решать подобную задачу и как вы это сделали?


Ответы (1 шт):

Автор решения: Barmaley

Единственная проблема с приведенным кодом, в том, что он используется недокументированный класс 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;
  }
→ Ссылка