「Xamarin.Macでリムーバブルメディアの着脱を検知する」の版間の差分

imported>Administrator
imported>Administrator
編集の要約なし
1行目: 1行目:
Xamarin.Macで[[CD-ROM]]や[[DVD-ROM]]、[[USBメモリ]]の挿入などを検出できると何かと嬉しい。
[[Xamarin.Mac]]で[[CD-ROM]]や[[DVD-ROM]]、[[USBメモリ]]の挿入などを検出できると何かと嬉しい。


== 実装例 ==
==実装例==
NSWorkspace.SharedWorkspace.NotificationCenterを使うと検出できるようだ。この通知で情報として飛んでくるのは変化のあったデバイスのパスのみなので、そのパスをNSWorkspace.SharedWorkspace.GetFileSystemInfoを使い[[CD-ROM]]なのか[[USBメモリ]]なのかなどを判別する。なお、CD-ROMやDVD-ROMの場合はディスクフォーマットごとに返ってくる値が違うようだ。どんな種類があるのか全部はまだ把握していない。
NSWorkspace.SharedWorkspace.NotificationCenterを使うと検出できるようだ。この通知で飛んでくるのは「変化のあったデバイスのパスのみ」なので、そのパスをNSWorkspace.SharedWorkspace.GetFileSystemInfoに投げて「[[CD-ROM]]なのか」「[[USBメモリ]]なのか」などを判別する。なお、GetFileSystemInfoの結果は[[CD-ROM]]や[[DVD-ROM]]の場合はディスクフォーマットごとに返ってくる値が違うようだ。どんな種類があるのか全部はまだ把握していない。


通知には種類があるようで、この例では以下を実装している。
通知には種類があるようで、この例では以下を実装している。
* NSWorkspaceDidMountNotification - マウント直後
 
* NSWorkspaceWillUnmountNotification - アンマウント直前
*NSWorkspaceDidMountNotification - マウント直後
*NSWorkspaceWillUnmountNotification - アンマウント直前
 
NSWorkspaceDidUnmountNotification(WillではなくDid)も実装すればアンマウント直前のみならずアンマウント直後も検出できる。ただしアンマウント後なのでデバイスパスしか取得できない。アンマウント失敗時を考慮するとこちらの方が確実かもしれないが詳しくは知らない。
NSWorkspaceDidUnmountNotification(WillではなくDid)も実装すればアンマウント直前のみならずアンマウント直後も検出できる。ただしアンマウント後なのでデバイスパスしか取得できない。アンマウント失敗時を考慮するとこちらの方が確実かもしれないが詳しくは知らない。


129行目: 131行目:
</source>
</source>


== 関連項目 ==
==関連項目==
 
*[[Xamarin.Mac/CDやDVDなどの光学メディアを排出する]]
*[[Xamarin.Mac/CDやDVDなどの光学メディアを排出する]]


[[category:MonoMac]]
[[category:MonoMac]]
[[category:Xamarin.Mac]]
[[category:Xamarin.Mac]]