「Xamarin.Macでリムーバブルメディアの着脱を検知する」を編集中
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
1行目: | 1行目: | ||
− | + | MonoMacで[[CD-ROM]]や[[DVD-ROM]]、[[USBメモリ]]の挿入などを検出できると何かと嬉しい。 | |
==実装例== | ==実装例== | ||
− | NSWorkspace.SharedWorkspace. | + | NSWorkspace.SharedWorkspace.NotificationCenterを使うと検出できるようだ。この通知で情報として飛んでくるのはデバイスのパスのみなので、そのパスをNSWorkspace.SharedWorkspace.GetFileSystemInfoを使い[[CD-ROM]]なのか[[USBメモリ]]なのかなどを判別する。なお、CD-ROMやDVD-ROMの場合はディスクフォーマットごとに返ってくる値が違うようだ。どんな種類があるのか全部はまだ把握していない。 |
通知には種類があるようで、この例では以下を実装している。 | 通知には種類があるようで、この例では以下を実装している。 | ||
+ | * NSWorkspaceDidMountNotification - マウント直後 | ||
+ | * NSWorkspaceWillUnmountNotification - アンマウント直前 | ||
+ | NSWorkspaceDidUnmountNotification(WillではなくDid)も実装すればアンマウント直前のみならずアンマウント直後も検出できる。ただしアンマウント後なのでデバイスパスしか取得できない。アンマウント失敗時を考慮するとこちらの方が確実かもしれないが詳しくは知らない。 | ||
− | + | なお、いわゆる自動実行(autorun.inf)などとは違うので起動していないアプリが起動するわけではない。あくまでアプリが立ち上がっている状態でのみ機能する。 | |
− | |||
− | |||
− | |||
<source lang="csharp"> | <source lang="csharp"> | ||
using System; | using System; | ||
− | using Foundation; | + | using MonoMac.Foundation; |
− | using AppKit; | + | using MonoMac.AppKit; |
public class RemovableMediaNotificationEventArgs : EventArgs | public class RemovableMediaNotificationEventArgs : EventArgs | ||
54行目: | 54行目: | ||
if (_mountObserver == null) | if (_mountObserver == null) | ||
{ | { | ||
− | + | _mountObserver = notification.AddObserver("NSWorkspaceDidMountNotification", DidMount); | |
− | _mountObserver = notification.AddObserver( | ||
} | } | ||
61行目: | 60行目: | ||
if (_unmountObserver == null) | if (_unmountObserver == null) | ||
{ | { | ||
− | + | _unmountObserver = notification.AddObserver("NSWorkspaceWillUnmountNotification", WiilUnmount); | |
− | _unmountObserver = notification.AddObserver( | ||
} | } | ||
} | } | ||
115行目: | 113行目: | ||
var workspace = NSWorkspace.SharedWorkspace; | var workspace = NSWorkspace.SharedWorkspace; | ||
− | workspace.GetFileSystemInfo(devicePath, out isRemovable, out isWritable, out isUnmountable, out description, out fileSystemType); | + | workspace.GetFileSystemInfo(devicePath, out isRemovable, out isWritable,out isUnmountable, out description, out fileSystemType); |
− | var args = new RemovableMediaNotificationEventArgs | + | var args = new RemovableMediaNotificationEventArgs { |
− | |||
DevicePath = devicePath, | DevicePath = devicePath, | ||
IsRemovable = isRemovable, | IsRemovable = isRemovable, | ||
132行目: | 129行目: | ||
==関連項目== | ==関連項目== | ||
− | * [[Xamarin. | + | *[[Xamarin.Mac/CDやDVDなどの光学メディアを排出する]] |
− | + | ||
+ | ==参考文献== | ||
+ | {{reflist}} | ||
+ | |||
+ | {{stub}} | ||
[[category:MonoMac]] | [[category:MonoMac]] | ||
[[category:Xamarin.Mac]] | [[category:Xamarin.Mac]] |