1

I have a live app on the Play Store that recently started crashing on Android 15 devices with the following error:

Caused by java.lang.SecurityException Starting FGS with type microphone callerApp=ProcessRecord{6d0f21f 24588:com.app.freeboomshare/u0a271} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_MICROPHONE] any of the permissions allOf=false [android.permission.CAPTURE_AUDIO_HOTWORD, android.permission.CAPTURE_AUDIO_OUTPUT, android.permission.CAPTURE_MEDIA_OUTPUT, android.permission.CAPTURE_TUNER_AUDIO_INPUT, android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT, android.permission.RECORD_AUDIO] and the app must be in the eligible state/exemptions to access the foreground only permission

Context:

I am using MediaProjection + Foreground Service to record screen and audio.

My targetSdkVersion is 34.

AndroidManifest.xml:

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA" />

The crash occurs when I start my foreground service before starting the screen capture.

What I have tried: Verified that RECORD_AUDIO and FOREGROUND_SERVICE permissions are granted at runtime.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { // If recording both screen and audio val serviceTypes = ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION or ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE or ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA startForeground(1, notification, serviceTypes) } else { startForeground(1, notification) }

Fragment.kt:

`private fun startRecording() { val mediaProjectionManager = requireActivity().getSystemService(AppCompatActivity.MEDIA_PROJECTION_SERVICE) as MediaProjectionManager startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), REQUEST_CODE) }

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == REQUEST_CODE) { if (resultCode == AppCompatActivity.RESULT_OK && data != null) { RecordingUtils.startCountdown(viewBinding.countdownText) { viewBinding.btStopRecording.visibility = View.VISIBLE val serviceIntent = Intent( requireActivity(), ScreenCameraReordingService::class.java ) serviceIntent.action = ACTION_START_RECORDING serviceIntent.putExtra(EXTRA_RESULT_CODE, resultCode) serviceIntent.putExtra(EXTRA_RESULT_DATA, data) serviceIntent.putExtra("isAudioRecordingON", isAudioRecordingON) serviceIntent.putExtra("isCameraRecordingON", isCameraRecordingON) ContextCompat.startForegroundService(requireActivity(), serviceIntent) disableToggles() } } else { viewBinding.btStartRecording.visibility = View.VISIBLE viewBinding.btStopRecording.visibility = View.GONE viewModel.startScreenRecordingClickLiveData.value = false Toast.makeText(requireActivity(), "Screen capture permission denied", Toast.LENGTH_SHORT).show() } } /*else if (requestCode == REQUEST_CODE_OVERLAY && resultCode == AppCompatActivity.RESULT_OK){ val intent = Intent(requireContext(), ScreenCameraReordingService::class.java).apply { action = ScreenCameraReordingService.ACTION_START_OVERLAY } requireContext().startForegroundService(intent) }*/ }` 

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.