簡體   English   中英

在 Android 上的內部存儲中復制移動文件

[英]Copying of moving a file inside Internal storage on Android

在 Android 應用程序中,用戶可以錄制他的聲音。 錄音保存在由以下定義的文件中:

audioTempFile = File(getFilesDir(), "Audio_Temp_File")

然后我想讓用戶選擇要保存的文件的最終文件夾和文件名。 因此,上面的 audioTempFile 可以用於可能的下一次錄制,而不會破壞當前的錄制。

例如,讓我們假設我希望將文件保存在這個名為 finalFile 的文件中:

val rootDir = getFilesDir()
val storeDir = File(rootDir, "MyStorageDirectory")
val finalFile = File(storeDir, "MyFinalFileName")

如何移動或可能將audioTempFile復制到finalFile

我通過搜索網絡沒有找到任何明確的答案。

我不知道保存到特定位置,但這是我在我的應用程序中保存錄音的方式。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
                        try{
                            val values = ContentValues()
                            values.put(MediaStore.MediaColumns.DISPLAY_NAME, allFiles[position].name)
                            values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3")
                            values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_MUSIC)
                            val savedAudio = context.contentResolver.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values)
                            val outputStream = savedAudio?.let {
                                context.contentResolver.openOutputStream(it)
                            }
                            val fis = FileInputStream(allFiles[position])
                            var length : Int
                            val buffer = ByteArray(8192)
                            while (fis.read(buffer).also { length = it } > 0) {
                                outputStream?.write(buffer, 0,length)
                            }
                            Toast.makeText(context, "Audio Saved to Music Folder", Toast.LENGTH_SHORT).show()
                        }catch (e : IOException){
                        Toast.makeText(
                            context,
                            "There was an error saving the file",
                            Toast.LENGTH_SHORT
                        ).show()
                        e.printStackTrace()
                    }
                    }else{
                        try {
                            val audioDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)
                            val audio = File(audioDir, allFiles[position].name)
                            val fis = FileInputStream(allFiles[position])
                            val fos = FileOutputStream(audio)
                            var length : Int
                            val buffer = ByteArray(8192)
                            while (fis.read(buffer).also { length = it } > 0){
                                fos.write(buffer,0,length)
                            }
                            Toast.makeText(context, "Audio Saved to Music Folder", Toast.LENGTH_SHORT).show()
                        }catch (e : IOException){
                            Toast.makeText(
                                context,
                                "There was an error saving the file",
                                Toast.LENGTH_SHORT
                            ).show()
                            e.printStackTrace()
                        }
                    }

如果您想保存公共目錄以外的文件,則需要MANAGE_EXTERNAL_STORAGE權限。 建議使用 MediaStore API 來保存您的文件。

如果我錯了,請糾正我,因為我還在學習。

希望這對你有幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM