У меня есть проблема, где, если я сканирую штрих -код с помощью CAMERAX и MLKIT, попробуйте сыграть вибрацию, используя класс вибратора, вибрация не будет играть. Я понял, что если я позвоню в cameraprovider.unbindall () после того, как анализатор считывает штрих -код, то вибратор успешно сыграет вибрацию. Но в моем случае моя камера всегда включена, чтобы включить сканирование и отключение и повторное определение камеры для каждого штрих-кода не идеально. Есть другой способ? Я уже пытался рассказать только об анализаторе вместо того, чтобы раскрыть все, но это не решило проблему.class BarcodeAnalyzerMainScreen(private val resultListener: BarcodeResultListener) : ImageAnalysis.Analyzer {
private val scanner = BarcodeScanning.getClient()
private var wait = AtomicBoolean(false)
private val context: Context = resultListener as Context
@androidx.annotation.OptIn(ExperimentalGetImage::class)
override fun analyze(imageProxy: ImageProxy) {
val mediaImage = imageProxy.image
if (mediaImage != null) {
val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)
// Pass image to the scanner
scanner.process(image)
.addOnSuccessListener { barcodes ->
// Task completed successfully
if (barcodes.isNotEmpty()
&& wait.compareAndSet(false, true)) {
val barcode = barcodes[0]
val mainExecutor = ContextCompat.getMainExecutor(context)
mainExecutor.execute {
// This block now runs on the main thread.
resultListener.onBarcodeDetected(barcode.rawValue ?: "")
}
}
}
.addOnFailureListener { e ->
imageProxy.close()
throw Error(e)
}
.addOnCompleteListener {
imageProxy.close()
}
}
}
fun enableScanning() {
wait.set(false)
}}
< /code>
Код камеры: < /p>
class MainScreenCamera(
private val viewFinder: PreviewView,
private val cameraExecutor: ExecutorService,
private val context: Context,
private val lifecycleOwner: LifecycleOwner,
private val barcodeResultListener: BarcodeResultListener,
private val mainActivity: MainActivity
< /code>
)
{< /p>
fun startCamera() {
if (camera != null) {
checkForFlashSetting()
}
toggleFlashIcon()
if (isCameraStarted) return
val cameraProviderFuture = ProcessCameraProvider.getInstance(context)
cameraProviderFuture.addListener({
// Used to bind the lifecycle of cameras to the lifecycle owner
cameraProvider = cameraProviderFuture.get()
// Preview
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(viewFinder.surfaceProvider)
}
barcodeAnalyzer = BarcodeAnalyzerMainScreen(barcodeResultListener)
// Setup the ImageAnalyzer for the ImageAnalysis use case
val imageAnalysisUseCase = ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
.also {
it.setAnalyzer(cameraExecutor, barcodeAnalyzer!!)
}
// Select back camera as a default
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
try {
// Unbind use cases before rebinding
cameraProvider?.unbindAll()
// Bind use cases to camera
camera = cameraProvider?.bindToLifecycle(
lifecycleOwner, cameraSelector, preview, imageAnalysisUseCase
)
isCameraStarted = true
viewFinder.isVisible = true
checkForFlashSetting()
} catch (exc: Exception) {
if (DEBUG_FULL) {
Log.println(Log.DEBUG, "error", "Use case binding failed " + exc)
}
}
}, ContextCompat.getMainExecutor(context))
}
fun stopCamera() {
viewFinder.isVisible = false
if (!isCameraStarted) return
try {
cameraProvider?.unbindAll()
isCameraStarted = false
processingBarcode.set(false)
} catch (exc: Exception) {
if (DEBUG_FULL) {
Log.println(Log.DEBUG, "error", "Error stopping camera: $exc")
}
}
}
fun enableScanning() {
barcodeAnalyzer?.enableScanning()
}
fun allPermissionsGranted(requiredPermissions: Array): Boolean {
return requiredPermissions.all {
ContextCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED
}
}
fun destroy() {
stopCamera()
}}
Подробнее здесь: https://stackoverflow.com/questions/797 ... a-moto-g04
Вибрация блокируется камерой на Motorola Moto G04 ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1759139393
Anonymous
У меня есть проблема, где, если я сканирую штрих -код с помощью CAMERAX и MLKIT, попробуйте сыграть вибрацию, используя класс вибратора, вибрация не будет играть. Я понял, что если я позвоню в cameraprovider.unbindall () после того, как анализатор считывает штрих -код, то вибратор успешно сыграет вибрацию. Но в моем случае моя камера всегда включена, чтобы включить сканирование и отключение и повторное определение камеры для каждого штрих-кода не идеально. Есть другой способ? Я уже пытался рассказать только об анализаторе вместо того, чтобы раскрыть все, но это не решило проблему.class BarcodeAnalyzerMainScreen(private val resultListener: BarcodeResultListener) : ImageAnalysis.Analyzer {
private val scanner = BarcodeScanning.getClient()
private var wait = AtomicBoolean(false)
private val context: Context = resultListener as Context
@androidx.annotation.OptIn(ExperimentalGetImage::class)
override fun analyze(imageProxy: ImageProxy) {
val mediaImage = imageProxy.image
if (mediaImage != null) {
val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)
// Pass image to the scanner
scanner.process(image)
.addOnSuccessListener { barcodes ->
// Task completed successfully
if (barcodes.isNotEmpty()
&& wait.compareAndSet(false, true)) {
val barcode = barcodes[0]
val mainExecutor = ContextCompat.getMainExecutor(context)
mainExecutor.execute {
// This block now runs on the main thread.
resultListener.onBarcodeDetected(barcode.rawValue ?: "")
}
}
}
.addOnFailureListener { e ->
imageProxy.close()
throw Error(e)
}
.addOnCompleteListener {
imageProxy.close()
}
}
}
fun enableScanning() {
wait.set(false)
}}
< /code>
Код камеры: < /p>
class MainScreenCamera(
private val viewFinder: PreviewView,
private val cameraExecutor: ExecutorService,
private val context: Context,
private val lifecycleOwner: LifecycleOwner,
private val barcodeResultListener: BarcodeResultListener,
private val mainActivity: MainActivity
< /code>
)
{< /p>
fun startCamera() {
if (camera != null) {
checkForFlashSetting()
}
toggleFlashIcon()
if (isCameraStarted) return
val cameraProviderFuture = ProcessCameraProvider.getInstance(context)
cameraProviderFuture.addListener({
// Used to bind the lifecycle of cameras to the lifecycle owner
cameraProvider = cameraProviderFuture.get()
// Preview
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(viewFinder.surfaceProvider)
}
barcodeAnalyzer = BarcodeAnalyzerMainScreen(barcodeResultListener)
// Setup the ImageAnalyzer for the ImageAnalysis use case
val imageAnalysisUseCase = ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
.also {
it.setAnalyzer(cameraExecutor, barcodeAnalyzer!!)
}
// Select back camera as a default
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
try {
// Unbind use cases before rebinding
cameraProvider?.unbindAll()
// Bind use cases to camera
camera = cameraProvider?.bindToLifecycle(
lifecycleOwner, cameraSelector, preview, imageAnalysisUseCase
)
isCameraStarted = true
viewFinder.isVisible = true
checkForFlashSetting()
} catch (exc: Exception) {
if (DEBUG_FULL) {
Log.println(Log.DEBUG, "error", "Use case binding failed " + exc)
}
}
}, ContextCompat.getMainExecutor(context))
}
fun stopCamera() {
viewFinder.isVisible = false
if (!isCameraStarted) return
try {
cameraProvider?.unbindAll()
isCameraStarted = false
processingBarcode.set(false)
} catch (exc: Exception) {
if (DEBUG_FULL) {
Log.println(Log.DEBUG, "error", "Error stopping camera: $exc")
}
}
}
fun enableScanning() {
barcodeAnalyzer?.enableScanning()
}
fun allPermissionsGranted(requiredPermissions: Array): Boolean {
return requiredPermissions.all {
ContextCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED
}
}
fun destroy() {
stopCamera()
}}
Подробнее здесь: [url]https://stackoverflow.com/questions/79777972/vibration-is-blocked-by-camerax-on-motorola-moto-g04[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия