나는이 문제를 디버깅하는 데 정말로 지쳤다. 저장 장치에 쓰는 응용 프로그램이 있습니다. 내가 안드로이드 개발로부터의 휴식을 가졌기 때문에 업데이트가 생길 때까지 애플리케이션이 잘 동작했다. (안드로이드 개발로 인해 업데이트가 발생했는지 모르겠다.) 안드로이드 버전은 6.0.1이다.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이 하위 디렉토리 예에 대한 매개 변수 인 "환경 설정") 김 : 여기
내가 디렉토리를 생성하는 방법이다 , 코드 (디버거로 검사)는 디렉토리가 존재하지 않는지 검사하고 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'가 매니페스트에 포함 된 코드를 스크랩 애플리케이션에 넣었습니다. 안드로이드 6.0.1을 실행하는 Nexus 5X에서 잘 작동했습니다. – CommonsWare