fix(audio,#2): переиспользование одного MediaProjection — устранён слом повторного ON_PHONE
- MainActivity: requestTick собирается в repeatOnLifecycle(RESUMED) + флаг AudioBridge.activityResumed - requestProjection(): не дёргает startActivity(MainActivity), пока Activity RESUMED (гонка с grant) - ensureAudioCaptureLoop(): запрос проекции один раз, повтор не чаще 20 c (было 2.5 c) - AudioBridge/GlassesAudioCapture: проекция одна на процесс и не гасится, переиспользуется - ShizukuProvisioner: PROJECT_MEDIA per-UID (на Android 12 package-level = no-op) - отладочные логи phone-side audio; BLOCKERS.md B-3 закрыт (E2E проверен)
This commit is contained in:
@@ -72,14 +72,14 @@ class MainActivity : ComponentActivity() {
|
||||
enableEdgeToEdge()
|
||||
ShizukuBootstrap.attach(this)
|
||||
// Запросы MediaProjection приходят из VmService через AudioBridge (задача #2).
|
||||
// Запускаем интент только когда Activity хотя бы STARTED, иначе лончер кинет.
|
||||
// Запускаем интент только когда Activity в RESUMED (реально видима): если её запускать
|
||||
// из не-foreground состояния, системная grant-активити отменяется и возвращает CANCELED.
|
||||
//
|
||||
// handledTick обязателен: repeatOnLifecycle перезапускает сбор при каждом выходе
|
||||
// Activity в STARTED (а после диалога проекции мы как раз возвращаемся в STARTED).
|
||||
// Без него один и тот же tick запускал бы запрос повторно, новая проекция гасила
|
||||
// предыдущую, и AudioRecord умирал с read -2.
|
||||
// Activity в RESUMED (а после диалога проекции мы как раз возвращаемся в RESUMED).
|
||||
// Без него один и тот же tick запускал бы запрос повторно.
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
||||
AudioBridge.requestTick.collect { tick ->
|
||||
if (tick > handledTick) {
|
||||
handledTick = tick
|
||||
@@ -112,9 +112,15 @@ class MainActivity : ComponentActivity() {
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
AudioBridge.activityResumed = true
|
||||
ShizukuBootstrap.refresh()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
AudioBridge.activityResumed = false
|
||||
super.onPause()
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(
|
||||
requestCode: Int,
|
||||
permissions: Array<String>,
|
||||
|
||||
Reference in New Issue
Block a user