Android 10 파 티 션 저장 에 적합 한 규칙

기억 장치 권한
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 파 티 션 저장 소 사용 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기