2

在我的应用程序中,我需要在拍摄一张照片时增加照片的数量。所以我FileObserverDCIM directory. 它监视拍摄的照片。

但是,FileObserver当我卸载我的 SD 卡时,这将停止观看,因为DCIM directory它不再存在。当我安装 SD 卡时,我有意图FileObserver后再次尝试注册。android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE但是FileObserver没有注册。

我的问题是:

  1. 安装SD卡后有没有其他方法可以制作FileObserver手表?
  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();
    
4

1 回答 1

0

您可以创建一个新BroadcastReceiver的来监视 SD 挂载/卸载事件。然后,在挂载事件中,告诉您FileObserver再次开始观看该DCIM目录。

您需要指定意图过滤器来监视您想要的事件:

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

来自官方 API 参考的这段代码展示了如何监控外部存储的状态。

于 2012-06-25T15:22:24.067 回答