Più eventi montare sul montaggio iPod
Domanda
Sto lavorando su un app che deve rilevare se un volume di archiviazione è montato o smontato. Sto usando GIO
per questo. Io ascolto per i segnali mount-added
e mount-removed
. Tutto funziona bene quando ho montare / smontare una pen drive. Tuttavia, sto vedendo un problema quando si monta un iPod. Io sono sempre due le richiamate ciascuno su montare e smontare. Ho assunto uno degli oggetti GMount
sarebbero ombra g_mount_is_shadowed sta tornando false per entrambi. Come faccio a decidere quali uno per processo e quali ignorare? Non posso processare entrambi. Devo rilevare la smontaggio montare / corrispondente al dispositivo di stoccaggio e di processo solo.
int main()
{
g_type_init();
GVolumeMonitor* volume_monitor = g_volume_monitor_get();
g_signal_connect(G_OBJECT(volume_monitor), "mount-added", G_CALLBACK(mount_added), NULL);
g_signal_connect(G_OBJECT(volume_monitor), "mount-removed", G_CALLBACK(mount_removed), NULL);
GMainLoop* main_loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(main_loop);
...
}
Soluzione
ho capito. GIO
emette un segnale mount-added
per ciascun file system che viene aggiunto. L'iPod è dotato di due sistemi di file - una per il sistema operativo e uno per immagazzinare musica. Quindi il callback ripetuta. Lo stesso accade in smontaggio. Questo non ha nulla a che fare con i supporti in ombra. Purtroppo, io ancora non so come distinguere tra i due monti. Gli unici GIO
shows differenza è che uno degli oggetti GMount
non ha un oggetto GVolume
associato. Non so come interpretare questo.