Android Photo Sicker Pick Multi Image Проблема [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Android Photo Sicker Pick Multi Image Проблема [закрыто]

Сообщение Anonymous »

Я использую ActivityResultContracts.pickmultiplevisualMedia () внутри пользовательского нижнего иэтфилдиалогфрагмента, чтобы позволить выбирать множественные изображения. < /p>
Проблема:
Когда я запускаю PickmultipleiMage.Launch (запрос) без передачи количества, непрерывно отклонений, но не открывает изображение. Считайте как PickmultiplevisualMedia (count), он работает так же, как и ожидалось, и открывает сборщик медиа. import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
import com.amogvendor.BuildConfig
import com.amogvendor.R
import com.amogvendor.core.Common
import com.amogvendor.databinding.DialogCameraPermissionBinding
import com.amogvendor.databinding.ImagePickerBottomSheetBinding
import com.amogvendor.di.component.BottomSheetComponent
import com.amogvendor.ui.base.BaseBottomSheet
import java.io.File
import java.io.FileOutputStream

class ImagePickerBottomSheet(
private val isMultiple: Boolean = false,
private val selectCount: Int = 0,
private val onImagePick: ((String) -> Unit)? = null,
private val onImagesPick: ((List) -> Unit)? = null,
private val onPermissionError: ((String) -> Unit)? = null
) : BaseBottomSheet() {

private var latestTmpUri: Uri? = null
private val count = if (selectCount == 0) 2 else selectCount

override fun createViewBinding(
inflater: LayoutInflater,
container: ViewGroup?,
attachToRoot: Boolean
) =
ImagePickerBottomSheetBinding.inflate(inflater, container, false)

override fun inject(bottomSheetComponent: BottomSheetComponent) {
bottomSheetComponent.inject(this)
}

override fun bindData() {
isCancelable = true

binding.sectionPhoto.setOnClickListener {
checkForPermissionAndOpenCamera()
}

binding.sectionGallery.setOnClickListener {

val request =
PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)
when {
!isMultiple -> {
pickSingleImage.launch(request)
}

isMultiple && selectCount > 0 -> {
pickMultipleImageWithCount.launch(request)
}

else -> {
pickMultipleImage.launch(request)
}
}
}
}

override fun destroyViewBinding() {}

// ---------------------------------------------------------------------------------------------
// Modern Pickers (Android 13+)
// ---------------------------------------------------------------------------------------------

private val pickSingleImage =
registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
uri?.let { getFileFromUri(it)?.let { path -> cropImageFromPath(path) } }
}

private val pickMultipleImage =
registerForActivityResult(ActivityResultContracts.PickMultipleVisualMedia(Int.MAX_VALUE)) { uris ->
val imageList = uris.mapNotNull { getFileFromUri(it) }
if (imageList.isNotEmpty()) onImagesPick?.invoke(imageList)
dismiss()
}

private val pickMultipleImageWithCount = registerForActivityResult(
ActivityResultContracts.PickMultipleVisualMedia(count)
) { uris ->
val imageList = uris.mapNotNull { getFileFromUri(it) }
if (imageList.isNotEmpty()) onImagesPick?.invoke(imageList)
dismiss()
}

// ---------------------------------------------------------------------------------------------
// Camera Flow
// ---------------------------------------------------------------------------------------------

private val requestCameraPermission =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
latestTmpUri = getTmpFileUri()
cameraLauncher.launch(latestTmpUri)
} else {
showSnackBarWithAction(getString(R.string.message_provide_camera_permisison))
}
}

private val cameraLauncher =
registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
if (success) {
latestTmpUri?.let { getFileFromUri(it)?.let { path -> cropImageFromPath(path) } }
}
}

private fun checkForPermissionAndOpenCamera() {
when {
ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED -> {
latestTmpUri = getTmpFileUri()
cameraLauncher.launch(latestTmpUri)
}

shouldShowRequestPermissionRationale(Manifest.permission.CAMERA) -> {
showSnackBarWithAction(getString(R.string.message_provide_camera_permisison))
}

else -> {
openCameraGalleryPermissionDialog(
title = getString(R.string.label_camera),
subTitle = getString(R.string.label_would_like_to_access_to_the_camera)
) {
requestCameraPermission.launch(Manifest.permission.CAMERA)
}
}
}
}

private fun openCameraGalleryPermissionDialog(
title: String,
subTitle: String,
onAllowedClick: () -> Unit
) {
val dialogBinding = DialogCameraPermissionBinding.inflate(layoutInflater)
val dialog =
AlertDialog.Builder(requireContext()).setView(dialogBinding.root).create().apply {
setCancelable(false)
window?.setBackgroundDrawableResource(R.drawable.bg_rounded_15dp_white)
}

dialogBinding.imageViewPermission.setImageResource(R.drawable.img_camera_green)
dialogBinding.textViewTitle.text = title
dialogBinding.textViewSubTitle.text = subTitle

dialogBinding.buttonAllow.setOnClickListener {
onAllowedClick()
dialog.dismiss()
}

dialogBinding.buttonLater.setOnClickListener {
dialog.dismiss()
dismiss()
}

dialog.show()
}

// ---------------------------------------------------------------------------------------------
// Helpers
// ---------------------------------------------------------------------------------------------

private fun cropImageFromPath(imagePath: String?) {
imagePath?.let {
CropImage()
.setFileName(it)
.setRequestCode(Common.RequestCode.CROP_IMAGE_ACTIVITY_REQUEST_CODE)
.start(requireContext(), this)
}
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == Common.RequestCode.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
val imagePath = data?.extras?.getString(Common.IMAGE_DATA)
imagePath?.let { onImagePick?.invoke(it) }
}
}

private fun getTmpFileUri(): Uri {
val tmpFile =
File.createTempFile("tmp_image_file", ".png", requireContext().cacheDir).apply {
createNewFile()
deleteOnExit()
}

return FileProvider.getUriForFile(
requireContext().applicationContext,
"${BuildConfig.APPLICATION_ID}.provider",
tmpFile
)
}

private fun getFileFromUri(uri: Uri): String? {
return try {
val inputStream = requireContext().contentResolver.openInputStream(uri)
val cacheFile =
File(requireContext().cacheDir, "temp_image_${System.currentTimeMillis()}.png")
inputStream.use { input ->
FileOutputStream(cacheFile).use { output ->
input?.copyTo(output)
}
}
cacheFile.absolutePath
} catch (e: Exception) {
e.printStackTrace()
null
}
}

private fun showSnackBarWithAction(message: String) {
onPermissionError?.invoke(message)
dismiss()
}
}
< /code>
Мой вопрос:
Почему Pickmultipleimage.launch (запрос) не открывает сборщик, если не пройден счет?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... mage-issue
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему Photo Photo Photo Fother Android не поддерживает предварительные элементы?
    Anonymous » » в форуме Android
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Запросить игроков, которые все еще могут выиграть или сыграть вничью в пуле Classic NFL Football Pick'em
    Anonymous » » в форуме MySql
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Selenium - Multi Browser и Multi User Log
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Multi-Role/Multianant Auth: Laravel Multi-Role/Multianant Auth: Customer Login Plound (проблема сеанса/промежуточного пр
    Anonymous » » в форуме Php
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Multi-Role/Multianant Auth: Laravel Multi-Role/Multianant Auth: Customer Login Plound (проблема сеанса/промежуточного пр
    Anonymous » » в форуме Php
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»