What is FileObserver?
A FileObserver in Android is an interface that monitors file access and modification. It triggers an event any time a file is accessed or changed by any process on the device.
Each FileObserver instance monitors either a file or a directory. And if the instance is observing a directory, events will be triggered for all files and sub-directories inside the monitored directory.
Warning
If a FileObserver is garbage collected, it will stop sending events. Also, FileObserver must be referenced from some live project to ensure that it works properly.
Geeky Stuff
- FileObserver is an abstract class. Consequently, one must create a subclass that extends the FileObserver class.
- The subclass also must implement the OnEvent method.
- FileObserver is based on Linux’s iNotify. iNotify is a simple but powerful file change notification system built into the Linux 2.6.13 kernel and above.
The Code
Today, we will be creating a FileObserver that will observe a particular directory aka Directory FileObserver. And this FileObserver will fire an event when any file is created in the Observing Directory.
Step 1: Add Read External Storage Permission to Manifest File
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Step 2: Create a subclass that extends FileObserver.
public class DirectoryFileObserver extends FileObserver {
String aboslutePath = "path to your directory";
public DirectoryFileObserver(String path) {
super(path,FileObserver.CREATE);
aboslutePath = path;
}
@Override
public void onEvent(int event, String path) {
if(path != null){
Log.e("FileObserver: ","File Created");
}
}
}
Step 3: Call the FileObserver from Activity
public class MainActivity extends AppCompatActivity {
DirectoryFileObserver directoryFileObserver;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
directoryFileObserver = new DirectoryFileObserver(Path of the directory);
directoryFileObserver.startWatching();
}
}
When you execute the above code, it will display a log message “File Created”, every time a new File or Directory is created in the directory referred by the variable absolutePath.
FileObserver in Android supports many types of events. For the complete list click here.