#android #kotlin #android-service #android-camera #android-databinding
Вопрос:
Я пытаюсь создать плавающее представление (что-то вроде плавающего изображения пользователя Facebook Messenger)
Когда я пытаюсь сделать это, используя следующий код — предварительный просмотр камеры никогда не запускается/не заполняется/не отображается, и я не уверен, почему.
Любые предложения/советы/идеи приветствуются.
Исходный Фрагмент кода:
class FloatingViewService : Service() {
private val context: Context? = null
private val mView: View? = null
private var mParams: WindowManager.LayoutParams? = null
private var mWindowManager: WindowManager? = null
private lateinit var binding: OverlayLayoutBinding
private var imageCapture: ImageCapture? = null
private var mFloatingView: View? = null
private var params: WindowManager.LayoutParams? = null
override fun onBind(intent: Intent?): IBinder? {
return null
}
@SuppressLint("ClickableViewAccessibility")
override fun onCreate() {
super.onCreate()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) startMyOwnForeground() else startForeground(
1,
Notification()
)
//Inflate the floating view layout we created
mFloatingView = LayoutInflater.from(this).inflate(R.layout.overlay_layout, null)
val LAYOUT_FLAG: Int
LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
params = WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
LAYOUT_FLAG,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
)
startCamera()
mWindowManager = getSystemService(WINDOW_SERVICE) as WindowManager?
mWindowManager!!.addView(mFloatingView, params)
startCamera()
}
private fun startCamera() {
val cameraProviderFuture = ProcessCameraProvider
.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
val preview = Preview.Builder()
.build()
.also { mPreview ->
mPreview.setSurfaceProvider(
binding.viewFinder.surfaceProvider
)
}
imageCapture = ImageCapture.Builder()
.build()
val cameraSelector = CameraSelector.DEFAULT_FRONT_CAMERA
try {
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
(context as LifecycleOwner),
cameraSelector,
preview, imageCapture
)
} catch (e: Exception) {
Log.d(Constants.TAG, "Camera Failed to Start")
}
}, ContextCompat.getMainExecutor(this))
}
}
Полный Источник:
https://drive.google.com/file/d/1ClgD3HLZaQ25toalygAZphuR7XUA3QRG/view?usp=sharing
Комментарии:
1. Поскольку вы обрабатываете исключение, проверяли ли вы logcat на наличие каких-либо сообщений типа «Камера не запустилась» ? Также попробуйте распечатать трассировку стека и посмотреть, не происходит ли что-нибудь не так.
2. Да — у меня есть — ошибка не регистрируется, и исключение никогда не возникает, если я устанавливаю точку останова
3. @GokulNathKP — я только что добавил полный источник — возможно, это даст больше информации