0

最終的に次のような画像 (EXTRA_OUTPUT) を保持するファイルを作成しようとしています。

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
                      Environment.DIRECTORY_PICTURES), "scouthouse");
            if(!mediaStorageDir.exists()) {
                mediaStorageDir.mkdirs();
            }

            SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
            String format = s.format(new Date());
            File file = new File(mediaStorageDir.getPath() + File.separator + format + ".jpg");
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }

mediaStorageDir.exists() は true を返しますが、Windows でフォルダーが見つかりません。場所は sdcard0/Pictures/scouthouse/ です。Pictures/ フォルダーはありますが、Android は /scouthouse/ フォルダーを作成しません。Bitmapfactory でファイルをデコードしようとすると、null が返されます。

編集!

そのため、ルートに到達するためにメソッドを少し単純化し、基本的には次のようにしました。

   private void createDir() {
    File file = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), "scouthouse");
    if(!file.mkdirs()) {
        Log.d("file", "file not created");
    }   
}

これによりファイル dir が作成され、初めてログが記録されません。ディレクトリが作成されましたが、電話のファイル システムのどこにも見つかりません。

    private File createNewFile() {
    File file = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), "scouthouse" + File.separator + "test.jpg");
    try {
        if(file.createNewFile()) {
            Log.d("file", "yiss");
            return file;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    return null;
}

このメソッドは null を返します。ファイルを作成できません..

4

1 に答える 1

1

mediaStorageDir.exists() は true を返しますが、Windows でフォルダーが見つかりません。

おそらく、 がMediaStoreディレクトリを認識していないため、Windows への MTP 接続がディレクトリを認識していないためです。ディレクトリではなくファイルに対してのみ試しましたが、これを解決するためにMediaScannerConnectionandを試すことができます。scanFile()また、インデックスを作成した後でも、Windows が MTP の結果をキャッシュし、Android がそれを認識していても変更を検出しない可能性があるため、エクスプローラー ウィンドウから「更新」を行うか、デバイスを切断/再接続する必要がある場合があります。

于 2013-09-03T13:57:37.300 に答える