Infos système
Lisez les détails de la machine — OS, CPU, mémoire, disques, GPUs, batteries, réseau, processus et utilisateurs — via l'objet SystemInfo.
SystemInfo vous permet de lire les détails de la machine depuis Kotlin : système d'exploitation,
CPU, mémoire, disques, GPUs, batteries, interfaces réseau, processus et utilisateurs. Chaque
lecture est un instantané pris au moment de l'appel, servi par une bibliothèque native propre à
chaque plateforme sur macOS, Windows et Linux.
Ajouter la dépendance
dependencies {
implementation("dev.nucleusframework:nucleus.system-info:2.0.7")
}Lire la machine
SystemInfo est un object. Appelez ses méthodes directement et vérifiez les null : une
valeur qui ne peut pas être récupérée sur une machine donnée renvoie null plutôt qu'une
valeur devinée.
import dev.nucleusframework.systeminfo.SystemInfo
fun main() {
val os = SystemInfo.osInfo() ?: return
println("OS : ${os.longOsVersion} (${os.cpuArch})")
val mem = SystemInfo.memoryInfo()
println("Mémoire : ${mem?.usedMemory?.div(1024 * 1024)} Mo / ${mem?.totalMemory?.div(1024 * 1024)} Mo")
SystemInfo.gpus().forEach { gpu ->
println("GPU : ${gpu.name} — ${gpu.dedicatedVideoMemory / 1024 / 1024} Mo")
}
val battery = SystemInfo.batteryInfo()
println("Batterie : ${battery?.let { "${(it.stateOfCharge * 100).toInt()}% (${it.state})" } ?: "aucune"}")
}Appelez d'abord SystemInfo.isAvailable() quand vous avez besoin de savoir si la bibliothèque
native a bien été chargée sur la plateforme courante.
Fonctionnement
Chaque méthode délègue à une bibliothèque native, une par système d'exploitation, chargée via JNI. La bibliothèque lit les APIs de la plateforme sous-jacente et renvoie de simples data classes Kotlin.
L'API fonctionne par instantané : chaque appel lit les valeurs courantes et retourne immédiatement. Il n'y a ni polling ni abonnement. Pour afficher les lectures avec un rafraîchissement régulier, rappelez la méthode et mettez le résultat en cache vous-même.
Un null ou une liste vide signifie que la valeur était indisponible, pas qu'une erreur a été
levée. Les méthodes qui renvoient une liste, comme disks() et gpus(), renvoient une liste
vide quand rien n'a pu être lu ; les méthodes à valeur unique, comme cpuInfo(), renvoient
null.
Référence de l'API
Système d'exploitation
val os = SystemInfo.osInfo()
// name, osVersion, longOsVersion, kernelVersion, distributionId,
// hostName, cpuArch, uptime, bootTimeosInfo() renvoie un OsInfo?.
CPU
val cpu = SystemInfo.cpuInfo() // CpuGlobalInfo?
cpu?.cpus?.forEach { core ->
println("${core.brand}: ${core.frequency} MHz, usage ${core.cpuUsage}%")
}
println("Usage global : ${cpu?.globalCpuUsage}%")cpuInfo() renvoie un CpuGlobalInfo? contenant globalCpuUsage, physicalCoreCount et une
liste cpus: List<CpuInfo> avec une entrée par cœur logique.
Mémoire et disques
SystemInfo.memoryInfo() // MemoryInfo? — compteurs total, free, available, used et swap
SystemInfo.disks() // List<DiskInfo> — name, fileSystem, mountPoint, totalSpace, availableSpaceGPUs, batteries et réseau
SystemInfo.gpus() // List<GpuInfo>
SystemInfo.batteryInfo() // BatteryInfo? — stateOfCharge, state, cycleCount, health, …
SystemInfo.networks() // List<NetworkInterfaceInfo>
SystemInfo.connectivityInfo() // ConnectivityInfo? — isConnected, meteredStatusBatteryInfo.state est un enum BatteryState : Charging, Discharging, Full ou
Unknown. ConnectivityInfo.meteredStatus est un enum MeteredStatus : NOT_AVAILABLE,
UNKNOWN, UNMETERED ou METERED.
Processus et utilisateurs
SystemInfo.processes() // List<ProcessInfo> — tous les processus en cours
SystemInfo.process(pid) // ProcessInfo? — un seul processus par pid: Long
SystemInfo.users() // List<UserInfo>Autres lectures
SystemInfo.components() // List<ComponentInfo> — sondes de température
SystemInfo.motherboard() // MotherboardInfo?
SystemInfo.product() // ProductInfo?
SystemInfo.idleTime() // Long — secondes depuis la dernière activité, ou -1 si indisponibleNotes
- Certaines lectures dépendent de la plateforme. Les sondes de température via
components()sont rares sous Windows, etmotherboard()est plus complète sous Linux. processes()parcourt tous les processus et peut coûter cher sur une machine chargée. Utilisezprocess(pid)quand vous n'en voulez qu'un seul.
idleTime() renvoie -1 quand la bibliothèque de la plateforme n'a pas été chargée, la même
situation que isAvailable() signale par false.
Et ensuite
- Couleurs système — lisez la couleur d'accentuation et l'état de contraste élevé du système.
- Mode sombre — détectez et observez le réglage clair/sombre du système.
- Modules — la liste complète des modules Nucleus et de leurs artefacts.
Couleur d'accent système
Lisez la couleur d'accent de l'OS et le réglage haut contraste choisis par l'utilisateur sous forme d'état Compose réactif.
Barre de menus macOS
Construisez la barre de menus macOS native depuis Compose, avec des items, des raccourcis clavier, des icônes, des badges et des sous-menus pilotés par l'état.