0

MediaRecorder を使用してカメラ アプリでビデオを作成しています。「準備メソッド」で出力ファイルを設定recorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString());し、getOutputMediaFileメソッドは次のとおりです

private void observeVideo(String mediaFilePath){
    observer = new FileObserver(mediaFilePath, FileObserver.CLOSE_WRITE) {
        @Override
        public void onEvent(int event, String path) {
            stopWatching();
            Toast.makeText(context, path + " saved correctly", Toast.LENGTH_LONG);
        }
    };
    observer.startWatching();
}

private File getOutputMediaFile(int type){
    // To be safe, you should check that the SDCard is mounted
    // using Environment.getExternalStorageState() before doing this.
    if (!Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)) {
        return  null;
    }

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), "MyCameraApp");
    // This location works best if you want the created images to be shared
    // between applications and persist after your app has been uninstalled.

    // Create the storage directory if it does not exist
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            Log.d("MyCameraApp", "failed to create directory");
            return null;
        }
    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile;
    if(type == MEDIA_TYPE_VIDEO) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
                "VID_"+ timeStamp + ".mp4");
        observeVideo(mediaFile.toString());
    } else {
        return null;
    }

    return mediaFile;
}

問題は、onEvent が呼び出されないことです。FileObserver に渡す (記録されたビデオの) パスが null かどうかを確認しましたが、この問題はなく、ログにはビデオの正しいパス名が表示されます。なんで?

4

1 に答える 1

0

これは Google で表示される最新の質問であるため、ここに入力を追加します。

考えられる問題 1:

オブザーバーに指定されたパスが間違っている、/ がない、またはファイルが存在しない

考えられる問題 2:

android.permisison.READ_STORAGE のようなパスへのアクセス許可がないか、必要に応じて FileProvider を使用していない

考えられる問題 3:

Android 6 fileObserver のバグです。機能しません。唯一の回避策は、X 秒ごとにチェックするルーパーを実行することです。

于 2018-06-05T12:32:04.373 に答える