MandreDevice API
Модуль для получения информации о текущем устройстве Android.
Импорт
from mandre_lib import MandreМетоды
get_device_info()
Возвращает подробную информацию об устройстве.
device_info = Mandre.Device.get_device_info()Параметры: Нет
Возвращает: dict - словарь с информацией об устройстве
Структура ответа:
{
"manufacturer": "Samsung", # Производитель
"model": "Galaxy S21", # Модель устройства
"android_version": "13", # Версия Android
"api_level": 33, # API Level
"screen_width": 1080, # Ширина экрана в пикселях
"screen_height": 2400, # Высота экрана в пикселях
"total_memory_mb": 8192, # Общая память в МБ
"is_rooted": False # Наличие root
}При ошибке:
{
"error": "Описание ошибки"
}Пример:
device_info = Mandre.Device.get_device_info()
if "error" in device_info:
self.log(f"Ошибка: {device_info['error']}")
return
self.log(f"Производитель: {device_info['manufacturer']}")
self.log(f"Модель: {device_info['model']}")
self.log(f"Android: {device_info['android_version']} (API {device_info['api_level']})")
self.log(f"Экран: {device_info['screen_width']}x{device_info['screen_height']}")
self.log(f"Память: {device_info['total_memory_mb']} МБ")
self.log(f"Root: {device_info['is_rooted']}")get_simple_info()
Возвращает краткую информацию об устройстве в виде строки.
simple_info = Mandre.Device.get_simple_info()Параметры: Нет
Возвращает: str - отформатированная строка
Формат: "Производитель Модель (Android Версия, API Уровень)"
Пример:
simple_info = Mandre.Device.get_simple_info()
# Вернёт: "Samsung Galaxy S21 (Android 13, API 33)"
BulletinHelper.show_info(simple_info)Поля информации
manufacturer
Производитель устройства (например, "Samsung", "Xiaomi", "Google").
model
Модель устройства (например, "Galaxy S21", "Mi 11", "Pixel 6").
android_version
Версия Android в виде строки (например, "13", "12", "11").
api_level
API Level Android в виде числа (например, 33, 31, 30).
screen_width
Ширина экрана в пикселях (например, 1080).
screen_height
Высота экрана в пикселях (например, 2400).
total_memory_mb
Общий объём оперативной памяти в мегабайтах (например, 8192).
is_rooted
Флаг наличия root-доступа: True или False.
Обработка ошибок
Всегда проверяйте наличие ключа error:
info = Mandre.Device.get_device_info()
if "error" in info:
BulletinHelper.show_error(f"Не удалось получить информацию: {info['error']}")
return
# Безопасно используем данные
print(info['manufacturer'])Примеры
Показ информации в сообщении
def cmd_device(self, plugin, args, params):
info = Mandre.Device.get_device_info()
if "error" in info:
params["message"] = f"❌ {info['error']}"
return HookResult(strategy=HookStrategy.MODIFY, params=params)
message = f"""📱 **Информация об устройстве**
🏭 Производитель: {info['manufacturer']}
📱 Модель: {info['model']}
🤖 Android: {info['android_version']} (API {info['api_level']})
📐 Экран: {info['screen_width']}x{info['screen_height']}
💾 Память: {info['total_memory_mb']} МБ
🔓 Root: {'Да' if info['is_rooted'] else 'Нет'}
"""
params["message"] = message
return HookResult(strategy=HookStrategy.MODIFY, params=params)Экспорт в JSON
def export_device_info(self):
import tempfile
import json
device_info = Mandre.Device.get_device_info()
if "error" in device_info:
BulletinHelper.show_error(device_info['error'])
return
with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False, encoding='utf-8') as f:
json.dump(device_info, f, ensure_ascii=False, indent=2)
temp_path = f.name
Mandre.Share.share_file(temp_path, "Device Info")
BulletinHelper.show_success("Экспортировано!")Проверка совместимости
def check_compatibility(self):
info = Mandre.Device.get_device_info()
if "error" in info:
return False
# Проверяем минимальные требования
if info['api_level'] < 26: # Android 8.0
BulletinHelper.show_error("Требуется Android 8.0 или выше")
return False
if info['total_memory_mb'] < 2048: # 2 ГБ
BulletinHelper.show_warning("Рекомендуется минимум 2 ГБ памяти")
return TrueКэширование
def on_plugin_load(self):
Mandre.use_persistent_storage(self)
last_update = self.get_setting("device_info_updated", 0)
current_time = int(time.time())
# Обновляем раз в 24 часа
if current_time - last_update > 86400:
device_info = Mandre.Device.get_device_info()
MandreData.write_persistent_json(self.id, "device_cache.json", device_info)
self.set_setting("device_info_updated", current_time)
def get_cached_device_info(self):
return MandreData.read_persistent_json(self.id, "device_cache.json", {})Лучшие практики
1. Всегда проверяйте ошибки
# ✅ Правильно
info = Mandre.Device.get_device_info()
if "error" in info:
return
# ❌ Неправильно
info = Mandre.Device.get_device_info()
print(info['manufacturer']) # Может упасть2. Кэшируйте данные
# ✅ Правильно - кэшируем на 24 часа
if need_update():
info = Mandre.Device.get_device_info()
cache_info(info)
# ❌ Неправильно - запрашиваем каждый раз
info = Mandre.Device.get_device_info()3. Используйте простую версию где возможно
# ✅ Правильно - для показа пользователю
simple = Mandre.Device.get_simple_info()
BulletinHelper.show_info(simple)
# ❌ Неправильно - избыточно
info = Mandre.Device.get_device_info()
BulletinHelper.show_info(f"{info['manufacturer']} {info['model']}")См. также
- Информация об устройстве - подробное руководство
- MandreShare - отправка файлов
- MandreNotification - уведомления