fix: 修改音频选择器
This commit is contained in:
@@ -143,6 +143,7 @@ dependencies {
|
|||||||
implementation 'com.github.JagarYousef:ChatVoicePlayer:1.1.0'
|
implementation 'com.github.JagarYousef:ChatVoicePlayer:1.1.0'
|
||||||
// 图片查看器 https://github.com/XiaoGe-1996/ImageViewer
|
// 图片查看器 https://github.com/XiaoGe-1996/ImageViewer
|
||||||
implementation 'com.github.XiaoGe-1996:ImageViewer:v1.0.0'
|
implementation 'com.github.XiaoGe-1996:ImageViewer:v1.0.0'
|
||||||
|
implementation 'com.github.majidarabi:AndroidFilePicker:0.2.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
kapt {
|
kapt {
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import android.widget.AdapterView
|
|||||||
import android.widget.AdapterView.OnItemSelectedListener
|
import android.widget.AdapterView.OnItemSelectedListener
|
||||||
import android.widget.ArrayAdapter
|
import android.widget.ArrayAdapter
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.widget.addTextChangedListener
|
import androidx.core.widget.addTextChangedListener
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
@@ -31,6 +32,13 @@ import com.easytools.tools.FileUtils
|
|||||||
import com.easytools.tools.ResourceUtils
|
import com.easytools.tools.ResourceUtils
|
||||||
import com.easytools.tools.ToastUtils
|
import com.easytools.tools.ToastUtils
|
||||||
import com.elvishew.xlog.XLog
|
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.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.gredicer.datetimepicker.DateTimePickerFragment
|
import com.gredicer.datetimepicker.DateTimePickerFragment
|
||||||
import com.hjq.permissions.OnPermissionCallback
|
import com.hjq.permissions.OnPermissionCallback
|
||||||
@@ -150,7 +158,9 @@ class ObtainMessageFragment: Fragment() {
|
|||||||
|
|
||||||
binding.layerAudioResult.visibility = if (hasAudio) VISIBLE else GONE
|
binding.layerAudioResult.visibility = if (hasAudio) VISIBLE else GONE
|
||||||
binding.layerGetAudio.visibility = if (hasAudio) GONE else VISIBLE
|
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)
|
lifecycle.addObserver(recorderLifecycleObserver)
|
||||||
@@ -178,7 +188,7 @@ class ObtainMessageFragment: Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val sendToArray = mutableListOf<String>("绑定车辆1(LYVXFEFEXNL754427)")
|
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)
|
android.R.layout.simple_dropdown_item_1line, android.R.id.text1, sendToArray)
|
||||||
binding.edtSendTo.onItemSelectedListener = object: OnItemSelectedListener {
|
binding.edtSendTo.onItemSelectedListener = object: OnItemSelectedListener {
|
||||||
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
|
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
|
||||||
@@ -221,14 +231,14 @@ class ObtainMessageFragment: Fragment() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 开始启动拍照界面
|
// 开始启动拍照界面
|
||||||
photoHelper.setCrop(true).takePhoto(activity!!)
|
photoHelper.setCrop(true).takePhoto(requireActivity())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDenied(permissions: MutableList<String>, never: Boolean) {
|
override fun onDenied(permissions: MutableList<String>, never: Boolean) {
|
||||||
if (never) {
|
if (never) {
|
||||||
Toast.makeText(activity, "永久拒绝授权,请手动授权拍照权限", Toast.LENGTH_SHORT).show()
|
Toast.makeText(activity, "永久拒绝授权,请手动授权拍照权限", Toast.LENGTH_SHORT).show()
|
||||||
// 如果是被永久拒绝就跳转到应用权限系统设置页面
|
// 如果是被永久拒绝就跳转到应用权限系统设置页面
|
||||||
XXPermissions.startPermissionActivity(context!!, permissions)
|
XXPermissions.startPermissionActivity(requireContext(), permissions)
|
||||||
} else {
|
} else {
|
||||||
onCameraDenied()
|
onCameraDenied()
|
||||||
showRationaleForCamera(permissions)
|
showRationaleForCamera(permissions)
|
||||||
@@ -239,13 +249,56 @@ class ObtainMessageFragment: Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
binding.btnStartPhoto.setOnClickListener {
|
binding.btnStartPhoto.setOnClickListener {
|
||||||
photoHelper.setCrop(true).selectPhoto(activity!!)
|
photoHelper.setCrop(true).selectPhoto(requireActivity())
|
||||||
}
|
}
|
||||||
|
|
||||||
// 用户选择录音文件
|
// 用户选择录音文件
|
||||||
binding.btnSelectSound.setOnClickListener {
|
binding.btnSelectSound.setOnClickListener {
|
||||||
photoHelper.setCrop(false).selectAudio(activity!!)
|
// photoHelper.setCrop(false).selectAudio(requireActivity())
|
||||||
// SingleAudioPicker.showPicker(context!!) {
|
|
||||||
|
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)
|
// val audioFile = File(it.contentUri.path)
|
||||||
// ToastUtils.showToast(audioFile.absolutePath)
|
// ToastUtils.showToast(audioFile.absolutePath)
|
||||||
// if (!audioFile.parentFile.parentFile.absolutePath.equals(SystemConstant.SoundFolder)) {
|
// if (!audioFile.parentFile.parentFile.absolutePath.equals(SystemConstant.SoundFolder)) {
|
||||||
@@ -293,7 +346,7 @@ class ObtainMessageFragment: Fragment() {
|
|||||||
if (never) {
|
if (never) {
|
||||||
Toast.makeText(activity, "永久拒绝授权,请手动授权拍照权限", Toast.LENGTH_SHORT).show()
|
Toast.makeText(activity, "永久拒绝授权,请手动授权拍照权限", Toast.LENGTH_SHORT).show()
|
||||||
// 如果是被永久拒绝就跳转到应用权限系统设置页面
|
// 如果是被永久拒绝就跳转到应用权限系统设置页面
|
||||||
XXPermissions.startPermissionActivity(context!!, permissions)
|
XXPermissions.startPermissionActivity(requireContext(), permissions)
|
||||||
} else {
|
} else {
|
||||||
onCameraDenied()
|
onCameraDenied()
|
||||||
showRationaleForCamera(permissions)
|
showRationaleForCamera(permissions)
|
||||||
@@ -482,7 +535,7 @@ class ObtainMessageFragment: Fragment() {
|
|||||||
localAttachmentList.add(audioAttachment)
|
localAttachmentList.add(audioAttachment)
|
||||||
}
|
}
|
||||||
if (localAttachmentList.isNotEmpty()) {
|
if (localAttachmentList.isNotEmpty()) {
|
||||||
MaterialAlertDialogBuilder(context!!)
|
MaterialAlertDialogBuilder(requireContext())
|
||||||
.setTitle("提示")
|
.setTitle("提示")
|
||||||
.setMessage("当前照片及音频内容需首先上传,是否尝试上传?")
|
.setMessage("当前照片及音频内容需首先上传,是否尝试上传?")
|
||||||
.setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i ->
|
.setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i ->
|
||||||
@@ -535,7 +588,6 @@ class ObtainMessageFragment: Fragment() {
|
|||||||
|
|
||||||
val confirmCallback = object: ObtainMessageViewModel.MyConfirmCallback {
|
val confirmCallback = object: ObtainMessageViewModel.MyConfirmCallback {
|
||||||
override fun onSucess() {
|
override fun onSucess() {
|
||||||
findNavController().navigate(R.id.navi)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -551,12 +603,12 @@ class ObtainMessageFragment: Fragment() {
|
|||||||
fun showRationaleForCamera(permissions: MutableList<String>) {
|
fun showRationaleForCamera(permissions: MutableList<String>) {
|
||||||
// showRationaleDialog(R.string.permission_camera_rationale, request)
|
// showRationaleDialog(R.string.permission_camera_rationale, request)
|
||||||
// Toast.makeText(context, "当前操作需要您授权相机权限!", Toast.LENGTH_SHORT).show()
|
// Toast.makeText(context, "当前操作需要您授权相机权限!", Toast.LENGTH_SHORT).show()
|
||||||
MaterialAlertDialogBuilder(context!!)
|
MaterialAlertDialogBuilder(requireContext())
|
||||||
.setTitle("提示")
|
.setTitle("提示")
|
||||||
.setMessage("当前操作需要您授权拍摄权限!")
|
.setMessage("当前操作需要您授权拍摄权限!")
|
||||||
.setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i ->
|
.setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i ->
|
||||||
dialogInterface.dismiss()
|
dialogInterface.dismiss()
|
||||||
XXPermissions.startPermissionActivity(activity!!, permissions)
|
XXPermissions.startPermissionActivity(requireActivity(), permissions)
|
||||||
})
|
})
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
@@ -567,12 +619,12 @@ class ObtainMessageFragment: Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun showRationaleForRecorder(permissions: MutableList<String>) {
|
fun showRationaleForRecorder(permissions: MutableList<String>) {
|
||||||
MaterialAlertDialogBuilder(context!!)
|
MaterialAlertDialogBuilder(requireContext())
|
||||||
.setTitle("提示")
|
.setTitle("提示")
|
||||||
.setMessage("当前操作需要您授权录音权限!")
|
.setMessage("当前操作需要您授权录音权限!")
|
||||||
.setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i ->
|
.setPositiveButton("确定", DialogInterface.OnClickListener { dialogInterface, i ->
|
||||||
dialogInterface.dismiss()
|
dialogInterface.dismiss()
|
||||||
XXPermissions.startPermissionActivity(activity!!, permissions)
|
XXPermissions.startPermissionActivity(requireActivity(), permissions)
|
||||||
})
|
})
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -158,6 +158,7 @@ class ObtainMessageViewModel: ViewModel() {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ToastUtils.showToast(result.msg)
|
ToastUtils.showToast(result.msg)
|
||||||
|
XLog.d(result.msg)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
ToastUtils.showToast(e.message)
|
ToastUtils.showToast(e.message)
|
||||||
|
|||||||
Reference in New Issue
Block a user