2011-12-28 8 views
2

Android FileObserverの場合、監視フォルダ内にディレクトリが作成されたり、そのフォルダ内でディレクトリが削除されたりすると、奇妙なイベント番号(1073742080,1073742336)が表示されます。奇妙なイベントのAndroid FileObserver

これらのイベント番号は、フォルダの作成と削除のために一貫して取得されています。しかし、これらのイベント番号はAndroidのFileObserverクラスには記載されていません。

誰かが、この奇妙なイベントが、フォルダの作成中にのみ作成され、ファイルの作成ではなく、なぜ受け取られているのか説明していただけますか?そして、この問題を回避する方法はありますか?

-Ron

答えて

4

IはMOVED_TOとMOVED_FROMイベントは、上位ビットがイベントフラグにオンにしているが見つかりました。 MOVED_FROMは0x40000040で、MOVED_TOは0x40000080です。この問題を回避するには、上位ビットをオフにするイベントコードを使用して 'ALL_EVENTS'と 'ALL_EVENTS'を単純に入力します。つまり、 "イベント& = FileObserver.ALL_EVENTS"です。

+0

クール、それは動作します! – Ron

+0

ちょっと考えましたが、上位ビットがファイルではなくディレクトリを示すことを意図しているのだろうかと思います。私はすぐに実験する時間がありませんが、ちょっと見てもいいかもしれません。この動作が見える場合は、おそらく報告することができます。 – mvsjes2

+0

はい、dirを表します:http://rswiki.csie.org/lxr/http/source/include/linux/inotify.h?a=m68k#L45 – mvsjes2

0

1073742080IN_CREATEのコード表している:「ファイルまたはフォルダを監視しているディレクトリに作成された」 を

は0x4xxxコードは、ディレクトリイベントを表すと思わinotify.hのライン56上にコメントとしてmvsjes2によって提供inotifyのヘッダをオフに基づいて: #define IN_ISDIR 0x40000000 /* event occurred against dir */

詳細については、文書化している別のユーザによって提供されています彼のユースケースのコードはここにあります: http://php.net/manual/en/function.inotify-read.php