Question

I have a problem on OS X, where if a drive is plugged in while powered off, and then powered on, I don't receive notification that a new disk has appeared. I do receive notification if I plug in a drive that is already powered on.

Currently, I'm registering callbacks for when a disk appears, disappears, or the description changes via disk arbitration (DARegisterDiskAppearedCallback et al). I don't see any other callbacks that might cover the scenario of a drive being turned on.

How do I receive notification when a drive that is already plugged in gets powered on?

Was it helpful?

Solution

NSWorkspace provides a notification, NSWorkspaceDidMountNotification, when a disk is mounted. In outline you declare a notification handler, for example:

- (void) mountNotify:(NSNotification *)notification
{
   // extract details from notification
   NSDictionary *userInfo = notification.userInfo;
   NSString *volumeMounted = userInfo[@"NSDevicePath"];
   NSString *volumeDisplayName = userInfo[@"NSWorkspaceVolumeLocalizedNameKey"];

   if (volumeMounted != nil)
   {
       // volume has been mounted
   }
}

and register for notifications:

[[[NSWorkspace sharedWorkspace] notificationCenter]
     addObserver:self
     selector:@selector(mountNotify:)
     name:NSWorkspaceDidMountNotification
     object:nil
];

There is also a similar notification, NSWorkspaceDidUnmountNotification, for when a disk is unmounted.

For more details see Apple's NSWorkspace documentation.

HTH.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top