フォルダに新しいファイルが追加されたり削除されたりなどのイベントを削除するのを監視したいときがよくあると思います。
コード
まずは、 FileObserver
のサブクラスを作成します。
public class DCIMObserver: FileObserver { public DCIMObserver(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) { } public DCIMObserver(string path) : base(path) { } public DCIMObserver(string path, FileObserverEvents mask) : base(path, mask) { } public override void OnEvent(FileObserverEvents e, string path) { // アウトプットするのを制御 if (e == FileObserverEvents.Create || e == FileObserverEvents.Delete || e == FileObserverEvents.MovedTo) { // 見やすくするために出力してる Console.WriteLine($"path {path}: {e}"); } } }
継承したクラスを利用して監視
namespace AndroiFolder { [Activity(Label = "AndroiFolder", MainLauncher = true)] public class MainActivity : Activity { // DCIM Observer のインスタンスを作成してるよん! public FileObserver FileObserver { get; set; } = new DCIMObserver(GetPathForDCIM()); private static string GetPathForDCIM() { // DCIM フォルダを取得してる return Environment.GetExternalStoragePublicDirectory(Environment.DirectoryDcim).Path; } protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); // 監視を開始するよん! FileObserver.StartWatching(); } } }
結果
こんな感じ
参考にしたサイト
ころいどさんの書いた記事は良く参考にしてますw qiita.com