web-dev-qa-db-ja.com

android mkdirsが機能しない

androidのカメラから画像を保存する必要があります。マニフェストで外部ストレージへの書き込み許可を使用し、このコードを使用しています

File dir = new File(Environment.getExternalStorageDirectory(), "Test");
if (!dir.exists() || !dir.isDirectory())
    dir.mkdirs();

String path = dir.getAbsolutePath();
Log.d(TAG, path);                     //log show the path
File file = new File(dir.getAbsolutePath() + "/Pic.jpg");
Log.d(TAG, file.getAbsolutePath());   //again path is shown here

outStream = new FileOutputStream(file);
outStream.write(bytes);
outStream.close();
Log.d(TAG, "onPictureTaken - wrote bytes: " + bytes.length);   //fail here
} catch (FileNotFoundException e) {
Log.d(TAG, "not done");                       //error is here (this exception is thrown)
} catch (IOException e) {
Log.d(TAG, "not");
} finally {  }

また、mkdirs()の代わりにmkdir()を試しました。

コードで何が間違っていたのか考えていますか?

ありがとう

16
lallous34

私のように経験がない人のために。私はこの問題と戦い、しばらくの間髪を失いました。私は(互換性のために)api 21をターゲットにしており、Lollipopで動作しましたが、Marshmallowではディレクトリを作成しませんでした。マニフェストに「使用」権限がありましたが、それでも機能しません。どうやらMarshmallowでAndroid studioでインストールすると、拒否したように静かに失敗する許可を与えるかどうかを尋ねることはありません。設定、アプリ、アプリを選択し、許可スイッチをオンにします。

44
protocolkey

IDIOT ME!私はマニフェストの許可を使用しましたが、電話にアプリをインストールしたとき、ストレージの許可を与えませんでした!...この質問に対する否定を理解しています...ご不便をおかけして申し訳ありません。

4
lallous34

Android Mでテストしている場合は、おそらく[設定]> [アプリ]> [許可]をチェックして、ストレージへのアクセス許可が付与されているかどうかを確認する必要があります。

2
Eaweb

入れましたか

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />

あなたのAndroidManifestで? Android M sdに書き込むためのユーザー許可を要求する必要があります。ここをご覧ください example

2
mcatta

ファイルではなくディレクトリを作成しました。次のコードで新しいファイルを作成します

File file = new File(dir.getAbsolutePath() + "/Pic.jpg");
file.createNewFile()
0
Ravi Rupareliya

これを試して。アプリケーションコードで完全に機能するMarshmallowの実行時許可を提供します。

 private String getFilename(String strFileName) {
        String filepath = Environment.getExternalStorageDirectory().getPath();
        File fileBase = new File(filepath, "Test");
        if (!fileBase.exists()) {
            fileBase.mkdirs();
        }
        return (file.getAbsolutePath() + "/" + strFileName + file_exts[currentFormat]);
    }

new File(getFilename(edt.getText().toString().trim()))
0
Mayur Patel