In my application I need to increase the count of photos when one is captured. So I set a FileObserver
for the DCIM directory
. It watches for captured photos.
However, this FileObserver
stops watching when I unmount my SD card because the DCIM directory
is no longer present. When I mount the SD card, I tried to register the FileObserver
once again after I got android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE
intent. But the FileObserver
is not getting registered.
My questions are:
- Is there any other way to make the
FileObserver
watch after mounting the SD card? - In some devices (HTC) I don't get any intents after I mount the SD card. What method can I use in that case?
Is there any other method to listen to the Photo taken by user in his built in soft button camera. I don't want to built my own camera.
fo = new FileObserver(path.toString(), FileObserver.CLOSE_WRITE) { @Override public void onEvent(int event, String path) { Log.d("yes", "event "+ event); Log.d("operator", "out side if" + Phototaken + externalStorageState .equals(Environment.MEDIA_MOUNTED)); if (Phototaken == 0 && event == 8){ String st = timeStamp(); Log.d("operator", "in event " + Phototaken); Log.d("operator", "lat: " + MainService.lat + " " + "lng: " + MainService.lng + " " + "location: " + MainService.addre + " " + "time: " + st); ptd.insert(st, String.valueOf(MainService.lat), String.valueOf(MainService.lng), MainService.addre); } } }; fo.startWatching();
you can create a new
BroadcastReceiver
to watch for SD mount/unmount events. Then, on a mount event, tell yourFileObserver
to start watching again theDCIM
directory.You need to specify intent filters to watch for the events you want:
This snippet from the official API reference shows how to monitor the state of the external storage.