Зарегистрируйте FileObserver после установки SD-карты

В моем приложении мне нужно увеличить количество фотографий при съемке. Итак, я установил FileObserver для DCIM directory, Он следит за фотографиями.

Тем не менее, это FileObserver перестает смотреть, когда я отключаю SD-карту, потому что DCIM directory больше не присутствует. Когда я монтировал SD-карту, я пытался зарегистрировать FileObserver еще раз после того, как я получил android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE намерение. Но FileObserver не регистрируется.

Мои вопросы:

  1. Есть ли другой способ сделать FileObserver смотреть после монтажа SD карты?
  2. В некоторых устройствах (HTC) я не получаю никаких намерений после того, как я установил SD-карту. Какой метод я могу использовать в этом случае?
  3. Есть ли какой-либо другой способ прослушать фотографию, сделанную пользователем в его встроенной программной кнопочной камере. Я не хочу создавать свою собственную камеру.

    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();
    

1 ответ

Решение

Вы можете создать новый BroadcastReceiver следить за событиями монтирования / размонтирования SD. Затем, в случае монтирования, скажите FileObserver чтобы начать смотреть снова DCIM каталог.

Вам нужно указать фильтры намерений, чтобы следить за событиями, которые вы хотите:

IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addAction(Intent.ACTION_MEDIA_REMOVED);

Этот фрагмент из официальной справки по API показывает, как отслеживать состояние внешнего хранилища.

Другие вопросы по тегам