This commit is contained in:
ocean 2024-06-11 10:10:27 +08:00
parent e97a408286
commit f8955cb1e4
3 changed files with 69 additions and 63 deletions

1
.idea/.name generated Normal file
View File

@ -0,0 +1 @@
HiMelody

View File

@ -16,8 +16,8 @@ android {
applicationId = "com.hi.melody.music.noise" applicationId = "com.hi.melody.music.noise"
minSdk = 24 minSdk = 24
targetSdk = 34 targetSdk = 34
versionCode = 1 versionCode = 2
versionName = "1.0.1" versionName = "1.0.2"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

View File

@ -21,15 +21,16 @@ import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import melody.offline.music.App
import melody.offline.music.R import melody.offline.music.R
import melody.offline.music.activity.SettingsActivity import melody.offline.music.activity.SettingsActivity
import melody.offline.music.adapter.ParentsVoiceAdapter import melody.offline.music.adapter.ParentsVoiceAdapter
import melody.offline.music.bean.Audio import melody.offline.music.bean.Audio
import melody.offline.music.databinding.FragmentImportBinding import melody.offline.music.databinding.FragmentImportBinding
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class ImportFragment : Fragment() { class ImportFragment : Fragment() {
private lateinit var binding: FragmentImportBinding private lateinit var binding: FragmentImportBinding
@ -59,7 +60,7 @@ class ImportFragment : Fragment() {
checkAndRequestPermissions() checkAndRequestPermissions()
} }
importAdapterList.clear() importAdapterList.clear()
importAdapterList.addAll(melody.offline.music.App.importList) importAdapterList.addAll(App.importList)
parentsVoiceAdapter = ParentsVoiceAdapter(requireActivity(), importAdapterList) parentsVoiceAdapter = ParentsVoiceAdapter(requireActivity(), importAdapterList)
binding.importRv.layoutManager = binding.importRv.layoutManager =
LinearLayoutManager(requireActivity(), LinearLayoutManager.VERTICAL, false) LinearLayoutManager(requireActivity(), LinearLayoutManager.VERTICAL, false)
@ -105,12 +106,12 @@ class ImportFragment : Fragment() {
binding.noContentLayout.visibility = View.VISIBLE binding.noContentLayout.visibility = View.VISIBLE
} }
if (melody.offline.music.App.currentPlayingAudio != null) { if (App.currentPlayingAudio != null) {
if (melody.offline.music.App.importList.isNotEmpty()) { if (App.importList.isNotEmpty()) {
importAdapterList.clear() importAdapterList.clear()
importAdapterList.addAll(melody.offline.music.App.importList) importAdapterList.addAll(App.importList)
for ((index, audio) in importAdapterList.withIndex()) { for ((index, audio) in importAdapterList.withIndex()) {
if (audio.file == melody.offline.music.App.currentPlayingAudio?.file) { if (audio.file == App.currentPlayingAudio?.file) {
parentsVoiceAdapter?.notifyDataSetChanged() parentsVoiceAdapter?.notifyDataSetChanged()
break break
} }
@ -149,8 +150,9 @@ class ImportFragment : Fragment() {
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
fun getMusicFiles(context: Context): List<String> { fun getMusicFiles(context: Context): List<String> {
val musicFiles = mutableListOf<String>() val musicFiles = mutableListOf<String>()
CoroutineScope(Dispatchers.IO).launch {
try {
val contentResolver: ContentResolver = context.contentResolver val contentResolver: ContentResolver = context.contentResolver
// 定义查询参数 // 定义查询参数
val projection = arrayOf( val projection = arrayOf(
MediaStore.Audio.Media._ID, MediaStore.Audio.Media._ID,
@ -172,7 +174,8 @@ class ImportFragment : Fragment() {
cursor?.use { cursor -> cursor?.use { cursor ->
val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID) val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID)
val nameColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME) val nameColumn =
cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)
val dataColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA) val dataColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
@ -189,16 +192,20 @@ class ImportFragment : Fragment() {
musicFiles.add(contentUri.toString()) musicFiles.add(contentUri.toString())
// 如果你想要获取文件的具体路径,可以使用 data 变量 // 如果你想要获取文件的具体路径,可以使用 data 变量
// musicFiles.add(data) // musicFiles.add(data)
CoroutineScope(Dispatchers.IO).launch {
if (audio.duration > 0) { if (audio.duration > 0) {
melody.offline.music.App.databaseManager.insertAudioFile(audio) App.databaseManager.insertAudioFile(audio)
} }
withContext(Dispatchers.Main) { App.initImportAudio {
melody.offline.music.App.initImportAudio {
importAdapterList.clear() importAdapterList.clear()
importAdapterList.addAll(melody.offline.music.App.importList) importAdapterList.addAll(App.importList)
parentsVoiceAdapter?.notifyDataSetChanged() parentsVoiceAdapter?.notifyDataSetChanged()
}
}
}
} catch (e: Exception) {
e.printStackTrace()
} finally {
withContext(Dispatchers.Main) {
if (importAdapterList.isNotEmpty()) { if (importAdapterList.isNotEmpty()) {
binding.noContentLayout.visibility = View.GONE binding.noContentLayout.visibility = View.GONE
} else { } else {
@ -209,8 +216,6 @@ class ImportFragment : Fragment() {
} }
} }
} }
}
}
return musicFiles return musicFiles
} }