fix: 修改音频选择器

This commit is contained in:
xiaoyan 2023-01-06 16:47:47 +08:00
parent df08700257
commit 4bdfbb72f6
3 changed files with 68 additions and 14 deletions

View File

@ -143,6 +143,7 @@ dependencies {
implementation 'com.github.JagarYousef:ChatVoicePlayer:1.1.0'
// https://github.com/XiaoGe-1996/ImageViewer
implementation 'com.github.XiaoGe-1996:ImageViewer:v1.0.0'
implementation 'com.github.majidarabi:AndroidFilePicker:0.2.1'
}
kapt {

View File

@ -14,6 +14,7 @@ import android.widget.AdapterView
import android.widget.AdapterView.OnItemSelectedListener
import android.widget.ArrayAdapter
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.core.widget.addTextChangedListener
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
@ -31,6 +32,13 @@ import com.easytools.tools.FileUtils
import com.easytools.tools.ResourceUtils
import com.easytools.tools.ToastUtils
import com.elvishew.xlog.XLog
import com.github.file_picker.FileType
import com.github.file_picker.ListDirection
import com.github.file_picker.adapter.FilePickerAdapter
import com.github.file_picker.data.model.Media
import com.github.file_picker.extension.showFilePicker
import com.github.file_picker.listener.OnItemClickListener
import com.github.file_picker.listener.OnSubmitClickListener
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.gredicer.datetimepicker.DateTimePickerFragment
import com.hjq.permissions.OnPermissionCallback
@ -150,7 +158,9 @@ class ObtainMessageFragment: Fragment() {
binding.layerAudioResult.visibility = if (hasAudio) VISIBLE else GONE
binding.layerGetAudio.visibility = if (hasAudio) GONE else VISIBLE
// binding.llAudioPlay.visibility = if (hasAudio) VISIBLE else GONE
if (!hasAudio) {
binding.llAudioPlay.visibility = GONE
}
}
)
lifecycle.addObserver(recorderLifecycleObserver)
@ -178,7 +188,7 @@ class ObtainMessageFragment: Fragment() {
}
val sendToArray = mutableListOf<String>("绑定车辆1(LYVXFEFEXNL754427)")
binding.edtSendTo.adapter = ArrayAdapter<String>(context!!,
binding.edtSendTo.adapter = ArrayAdapter<String>(requireContext(),
android.R.layout.simple_dropdown_item_1line, android.R.id.text1, sendToArray)
binding.edtSendTo.onItemSelectedListener = object: OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
@ -221,14 +231,14 @@ class ObtainMessageFragment: Fragment() {
return
}
// 开始启动拍照界面
photoHelper.setCrop(true).takePhoto(activity!!)
photoHelper.setCrop(true).takePhoto(requireActivity())
}
override fun onDenied(permissions: MutableList<String>, never: Boolean) {
if (never) {
Toast.makeText(activity, "永久拒绝授权,请手动授权拍照权限", Toast.LENGTH_SHORT).show()
// 如果是被永久拒绝就跳转到应用权限系统设置页面
XXPermissions.startPermissionActivity(context!!, permissions)
XXPermissions.startPermissionActivity(requireContext(), permissions)
} else {
onCameraDenied()
showRationaleForCamera(permissions)
@ -239,13 +249,56 @@ class ObtainMessageFragment: Fragment() {
}
binding.btnStartPhoto.setOnClickListener {
photoHelper.setCrop(true).selectPhoto(activity!!)
photoHelper.setCrop(true).selectPhoto(requireActivity())
}
// 用户选择录音文件
binding.btnSelectSound.setOnClickListener {
photoHelper.setCrop(false).selectAudio(activity!!)
// SingleAudioPicker.showPicker(context!!) {
// photoHelper.setCrop(false).selectAudio(requireActivity())
showFilePicker(
submitText = "确认",
fileType = FileType.AUDIO,
title = "选择音频文件",
cancellable = true,
listDirection = ListDirection.RTL,
accentColor = ContextCompat.getColor(requireContext(), R.color.purple_700),
titleTextColor = ContextCompat.getColor(requireContext(), R.color.purple_700),
onSubmitClickListener = object : OnSubmitClickListener {
override fun onClick(files: List<Media>) {
// Do something here with selected files
val audioFile = files.get(0).file
if (!audioFile.parentFile.parentFile.absolutePath.equals(SystemConstant.SoundFolder)) {
val copyResult = FileIOUtils.writeFileFromIS(File(SystemConstant.SoundFolder, audioFile.name), FileInputStream(audioFile))
XLog.e("拷贝结果:"+copyResult)
if (!copyResult) {
ToastUtils.showToast("无法访问该文件,请重新选择其他文件")
return
}
obtainMessageViewModel.updateMessageAudio(File(SystemConstant.SoundFolder, audioFile.name).absolutePath)
} else {
obtainMessageViewModel.updateMessageAudio(audioFile.absolutePath)
}
}
},
onItemClickListener = object : OnItemClickListener {
override fun onClick(media: Media, position: Int, adapter: FilePickerAdapter) {
if (!media.file.isDirectory) {
if (!media.file.name.endsWith(".m4a")) {
ToastUtils.showToast("只能选择.m4a文件")
return
}
if (media.file.length()>2*1000*1000) {
ToastUtils.showToast("文件不能超过2M")
return
}
adapter.setSelected(position)
}
}
}
)
// SingleAudioPicker.showPicker(requireContext()) {
// val audioFile = File(it.contentUri.path)
// ToastUtils.showToast(audioFile.absolutePath)
// if (!audioFile.parentFile.parentFile.absolutePath.equals(SystemConstant.SoundFolder)) {
@ -293,7 +346,7 @@ class ObtainMessageFragment: Fragment() {
if (never) {
Toast.makeText(activity, "永久拒绝授权,请手动授权拍照权限", Toast.LENGTH_SHORT).show()
// 如果是被永久拒绝就跳转到应用权限系统设置页面
XXPermissions.startPermissionActivity(context!!, permissions)
XXPermissions.startPermissionActivity(requireContext(), permissions)
} else {
onCameraDenied()
showRationaleForCamera(permissions)
@ -482,7 +535,7 @@ class ObtainMessageFragment: Fragment() {
localAttachmentList.add(audioAttachment)
}
if (localAttachmentList.isNotEmpty()) {
MaterialAlertDialogBuilder(context!!)
MaterialAlertDialogBuilder(requireContext())
.setTitle("提示")
.setMessage("当前照片及音频内容需首先上传,是否尝试上传?")
.setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i ->
@ -535,7 +588,6 @@ class ObtainMessageFragment: Fragment() {
val confirmCallback = object: ObtainMessageViewModel.MyConfirmCallback {
override fun onSucess() {
findNavController().navigate(R.id.navi)
}
}
@ -551,12 +603,12 @@ class ObtainMessageFragment: Fragment() {
fun showRationaleForCamera(permissions: MutableList<String>) {
// showRationaleDialog(R.string.permission_camera_rationale, request)
// Toast.makeText(context, "当前操作需要您授权相机权限!", Toast.LENGTH_SHORT).show()
MaterialAlertDialogBuilder(context!!)
MaterialAlertDialogBuilder(requireContext())
.setTitle("提示")
.setMessage("当前操作需要您授权拍摄权限!")
.setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i ->
dialogInterface.dismiss()
XXPermissions.startPermissionActivity(activity!!, permissions)
XXPermissions.startPermissionActivity(requireActivity(), permissions)
})
.show()
}
@ -567,12 +619,12 @@ class ObtainMessageFragment: Fragment() {
}
fun showRationaleForRecorder(permissions: MutableList<String>) {
MaterialAlertDialogBuilder(context!!)
MaterialAlertDialogBuilder(requireContext())
.setTitle("提示")
.setMessage("当前操作需要您授权录音权限!")
.setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i ->
dialogInterface.dismiss()
XXPermissions.startPermissionActivity(activity!!, permissions)
XXPermissions.startPermissionActivity(requireActivity(), permissions)
})
.show()
}

View File

@ -158,6 +158,7 @@ class ObtainMessageViewModel: ViewModel() {
}
} else {
ToastUtils.showToast(result.msg)
XLog.d(result.msg)
}
} catch (e: Exception) {
ToastUtils.showToast(e.message)