检测卸载可移动存储的时间

时间:2009-09-10 23:17:49

标签: cocoa volume removable-drive nsworkspace diskarbitration

我正在开发一个应用程序,该应用程序应该检测卸载可移动存储或从USB强行拔出时发生的事件。我怎样才能收到这些活动?

我已经看到NSWorkspace第一种顺利卸载设备的可能性,但是这个类有像-unmountAndEjectDeviceAtPath:这样的方法来卸载设备。有人能指出一些检测未安装卷的示例代码吗?

2 个答案:

答案 0 :(得分:10)

来自HardwareGrowler的一堆代码:

NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
NSNotificationCenter *center = [workspace notificationCenter];

[center addObserver:[VolumeNotifier class] selector:@selector(volumeDidMount:) name:NSWorkspaceDidMountNotification object:nil];
[center addObserver:[VolumeNotifier class] selector:@selector(volumeDidUnmount:) name:NSWorkspaceDidUnmountNotification object:nil];
[center addObserver:[VolumeNotifier class] selector:@selector(volumeWillUnmount:) name:NSWorkspaceWillUnmountNotification object:nil];

然后,您需要实现对通知ala

做出反应的方法
+ (void) volumeDidUnmount:(NSNotification *)aNotification;
{
...
}

对于整个实施,请查看http://growl.info/source.php 在Source包中,转到Extras / HardwareGrowler,然后查看VolumeNotifier.h/m

<强>更新

彼得斯的答案优于此。如果你遇到这个问题,请考虑使用磁盘仲裁框架。

答案 1 :(得分:7)