この問題のデバッグには本当にうんざりです。私はストレージに書き込むアプリケーションを持っています。私はAndroidのバージョンが6.0.1になっています。アップデートがあるまで、アプリケーションは正常に動作しました(私はAndroidの開発からの休憩があったため、どのアップデートが原因か分かりません)。Androidのストレージ権限書き込みのみ?
とにかく、私は外部ストレージに書き込もうとしています。私は、Androidのための新たな許可制度を読んで準備許可を得た、と私は私のコードのチェックをしていました:私がチェックしたデバッグでは
checkSelfPermission("android.permission.READ_EXTERNAL_STORAGE")
checkSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE")
(私もチェックし、許可かどうかを確認するコードを取得します必要ですが、私はそれが本当にあることを確認したかった;))私はに等しい、彼らは値0を返すことを観察してきたので、
をPackageManager.PERMISSION_GRANTED、権限が確実に付与されます。私はストレージのAppディレクトリを作成して、pdfファイルを作成し、sqlite DBを格納し、そのようなものを作成しようとしています。
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// We can read and write the media
File dir = Environment.getExternalStorageDirectory();
String sNewDir = Constants.ApplicationDataDir;
if (sSubDir == null) {
sSubDir = "";
} else {
sSubDir = sSubDir.trim();
}
if (sSubDir.length() > 0) {
sNewDir += File.separator + sSubDir;
}
File dirName = new File(dir, sNewDir);
if (!dirName.exists()) {
if (!dirName.mkdirs()) {
LogDump.e("getAppDirectory err", " (sSubDir=<" + sSubDir + "> cannot create dir: " + dirName.getAbsolutePath());
}
}
return dirName;
} else {
// Something else is wrong
LogDump.e("getAppDirectory err", " (sSubDir=<" + sSubDir + "> not mounted state: " + state);
return null;
}
dirNameにの価値がある/ストレージ/エミュレート/ 0/MY_APP_CONST_VALUE/sSubDir(。sSubdirは、サブディレクトリIE用のパラメータである "環境設定") スヨン:ここ
は、私はディレクトリを作成する方法です、コード(デバッガでチェックする)はディレクトリが存在しないことをチェックし、mkdirs()は結果をfalseに返します。実際には、ディレクトリが存在せず、作成できないことを意味します。これは、それが作成することはできませんので、非常に論理的と思われる
... SQLLiteコード そしてほかのファイル操作のためにFileNotFound例外から
W/FileUtils: Failed to chmod(/storage/emulated/0/MY_APP_CONST_VALUE/DB/pcdrdata.sqlite3): android.system.ErrnoException: chmod failed: EPERM (Operation not permitted)
:私のアプリケーションの動作中
私のログがで満たされますディレクトリ、右? ここで最も紛らわしい部分は
私は総司令官を使用していますが、実際にディレクトリが作成され、sqliteデータベースがコピーされ、FileNotFoundExceptionを行うすべてのファイルがそこにあることがわかります。私はテストを行い、それらを削除し、アプリケーションを再実行し、それらは再度場所にコピーされます。ただし、ファイルに対する読み取り操作はできません。
それで何とかディレクトリを作成し、それ以外の場合はmkdirs()でも書き込むことができますが、読み込みはできません。
私は本当に混乱しており、試練に疲れています。私はまた、SDカードなしで同じことを試してみました - 同じ結果にかかわらず、.....
を私のアプリケーションは、PDFファイルを作成する - 彼らは成功した作成されますが、それでも総司令官はそれがそれらを開くことができないと言われ....
私の携帯電話はXperia Z3
IDEから新しいバージョンを実行するだけでなく、 。 – CommonsWare
FWIW、あなたのコードを 'targetSdkVersion'が22、WRITE_EXTERNAL_STORAGEがマニフェストにあるスクラップアプリケーションに入れました。Android 6.0.1を実行しているNexus 5Xでうまくいきました。 – CommonsWare