Android 10 파 티 션 저장 에 적합 한 규칙
5501 단어 Android파 티 션 저장 소
Android Q 는 여전히 READ 사용EXTRNAL_STORAGE 와 WRITEEXTRNAL_STORAGE 는 저장 소 실행 권한 으로 사용 되 지만 지금 은
이러한 권한 을 가 져 왔 습 니 다.외부 저장 소 에 접근 하 는 것 도 제한 되 어 있 습 니 다.자신의 디 렉 터 리 에 있 는 파일 과 공공 체 내 파일 에 만 접근 할 수 있 습 니 다.
내부 저장 외부 저장 소
내부 저장 소
외부 저장 소
비고
영문 명칭
Internal storage
External storage
버 전 변경
불변 하 다
4.4 이전에 외부 저장 소 는 SD 카드 와 같은 모 바 일 저장 장치 만 대 표 했 을 뿐 4.4 이후 내 장 된 외부 저장 소 와 SD 카드(일부 휴대 전 화 는 SD 카드 를 제공 하 는 카드 슬롯 이 없 으 면 내 장 된 외부 저장 소 만 포함)를 포함 했다.
보기 방법
시 뮬 레이 터+adb 셸 로 들 어가 거나 Android Studio Devices File Explorer
일반 문서 관리 앱 은 다 볼 수 있어 요.
su root 명령 으로 시 뮬 레이 터 에 권한 부여
구성 성분
System/:시스템 용 데이터 데이터 데이터 저장/:응용 관련 데이터 저장 vendor/:제조 업 체 의 객 제 화 된 데이터 저장 등
개인 저장 소:android/폴 더 에서 응 용 된 개인 저장 소 공공 저장 소:Movie,Download,DCIM,Picture,Documents,Ringtones,Music,Alarms
저장 내용
db share preference files cache 등
개발 자 자신 이 저장 해 야 할 데이터,예 를 들 어 비디오 파일,오디 오 파일,또는 표 로그 파일 등
내부 저장 소 가 작고 소중 합 니 다.우 리 는 기본적으로 그것 을 조작 하지 않 고 저장 해 야 할 것 은 모두 외부 저장 소 에 저장 합 니 다.
획득 경로 방법
Environment.getDataDirectory() Context.getFileDir()
Environment.getExternalStorageDirectory()(traget>=30,폐기 됨)Context.getExternalFilesDir()
기본적으로 Context 의 방법 은 모두 응 용 된 개인 저장 경로 E nvironment 의 방법 으로 루트 디 렉 터 리 를 가 져 옵 니 다.
마 운 트 해제 적용 시
개인 경로 의 파일 을 모두 삭제 합 니 다:data/user/0/packageName/
개인 경로 의 파일 을 모두 삭제 합 니 다.즉,android/data/packageName/공공 저장 영역 은 변경 되 지 않 습 니 다.
어울리다
외부 저장 폴 더 가 져 오기
// fileDirName
val file:File = context.getExternalFileDir("fileDirName") // fileDirName
// /storage/emulated/0/Android/data/packageName/files/fileDirName
외부 저장 파일 만 들 기
val appFileDirName = applicationContext.getExternalFilesDir("fileDirName")?.absolutePath
val newFile = File(appFileDirName, "temp.txt")
val fileWriter = FileWriter(newFile)
fileWriter.write("test information")
fileWriter.flush()
fileWriter.close()
외부 저장 공공 디 렉 터 리 의 파일 경 로 를 만 듭 니 다
/**
* @param fileName
* @param relativePath
*/
fun insertFileIntroMediaStore(
context: Context,
fileName: String,
relativePath: String
): Uri? {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
return null
}
val contentResolver = context.contentResolver
val values = ContentValues()
values.put(MediaStore.Downloads.DISPLAY_NAME, fileName)
values.put(MediaStore.Downloads.MIME_TYPE, "text/plain")
values.put(MediaStore.Downloads.RELATIVE_PATH, relativePath)
//
// ,
// , 。
// Environment.getExternalStorageState() 。 MEDIA_MOUNTED, 。 MEDIA_MOUNTED_READ_ONLY, 。
val externalStorageState = Environment.getExternalStorageState()
return if (externalStorageState.equals(Environment.MEDIA_MOUNTED)) {
contentResolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, values)
} else {
contentResolver.insert(MediaStore.Downloads.INTERNAL_CONTENT_URI, values)
}
}
/**
* @param context
* @param insertUri Uri
* @param inputStream
*/
fun saveFile(context: Context, insertUri: Uri?, inputStream: InputStream?) {
insertUri ?: return
inputStream ?: return
val resolver = context.contentResolver
val out = resolver.openOutputStream(insertUri)
var read: Int
val buffer = ByteArray(1024)
while (inputStream.read(buffer).also { read = it } != -1) {
out?.write(buffer)
}
inputStream.close()
out?.flush()
out?.close()
}
/**
* @param context
* @param insertUri Uri
* @param sourceFile
*/
fun saveFile(context: Context, insertUri: Uri?, sourceFile: File?) {
insertUri ?: return
sourceFile ?: return
val inputStream = FileInputStream(sourceFile)
val resolver = context.contentResolver
val out = resolver.openOutputStream(insertUri)
var read: Int
val buffer = ByteArray(1024)
while (inputStream.read(buffer).also { read = it } != -1) {
out?.write(buffer)
}
inputStream.close()
out?.flush()
out?.close()
}
외부 저장 공공 디 렉 터 리 파일 읽 기
/**
* by uri
* @param context
* @param uri
*/
fun getInputStreamByUri(context: Context, uri: Uri?): InputStream? {
uri ?: return null
val openFileDescriptor = context.contentResolver.openFileDescriptor(uri, "r")
return FileInputStream(openFileDescriptor?.fileDescriptor)
}
이상 은 안 드 로 이 드 10 파 티 션 저장 소 사용 에 대한 상세 한 내용 입 니 다.안 드 로 이 드 10 파 티 션 저장 소 사용 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.