Начало фоновой активности Android
Я знаю об ограничениях на запуск действий в фоновом режиме, начиная с Android API 29, но мне бросает вызов какое-то приложение, которое может отображать действие, несмотря на ограничения. Приложение не используетSYSTEM_ALERT_WINDOW
разрешение рисовать поверх других приложений. Он просто представляет активность, в то время как работает только служба переднего плана.
Приложение прослушивает пакеты, добавленные (ACTION_PACKAGE_ADDED) и удаленные (ACTION_PACKAGE_REMOVED), и запускает действие, оформленное в виде диалога.
Обычно, когда я регистрирую приемник (либо в манифесте, либо во время выполнения в службе переднего плана) и хочу начать действие, я получаю следующий журнал из:
2022-12-25 11:29:57.188 511-855 ActivityTaskManager pid-511 I START u0 {flg=0x10000000 cmp=com.jasperapps.testpackageremoveintent/.TargetActivity} from uid 10146
2022-12-25 11:29:57.190 511-855 ActivityTaskManager pid-511 W Background activity start [callingPackage: com.jasperapps.testpackageremoveintent; callingUid: 10146; appSwitchAllowed: false; isCallingUidForeground: false; callingUidHasAnyVisibleWindow: false; callingUidProcState: FOREGROUND_SERVICE; isCallingUidPersistentSystemProcess: false; realCallingUid: 10146; isRealCallingUidForeground: false; realCallingUidHasAnyVisibleWindow: false; realCallingUidProcState: FOREGROUND_SERVICE; isRealCallingUidPersistentSystemProcess: false; originatingPendingIntent: null; allowBackgroundActivityStart: false; intent: Intent { flg=0x10000000 cmp=com.jasperapps.testpackageremoveintent/.TargetActivity }; callerApp: ProcessRecord{5224fb8 12583:com.jasperapps.testpackageremoveintent:remote/u0a146}; inVisibleTask: false]
2022-12-25 11:29:57.191 511-855 ActivityTaskManager pid-511 E Abort background activity starts from 10146
ГдеAbort background activity starts from 10146
означает, что я нарушаю фоновые ограничения, чего и следовало ожидать.
Вместо этого, когда я исследовал логарифм дляActivityTaskManager
для приложения, обходные пути которого я нашел следующим:
2022-12-25 11:34:59.196 511-4063 ActivityTaskManager pid-511 I START u0 {cmp=com.bingo.cleaner/.modules.scene.fork.ForkActivityC (has extras)} from uid 10148
2022-12-25 11:34:59.198 511-4063 ActivityTaskManager pid-511 W Background activity start [callingPackage: com.bingo.cleaner; callingUid: 10148; appSwitchAllowed: false; isCallingUidForeground: false; callingUidHasAnyVisibleWindow: false; callingUidProcState: FOREGROUND_SERVICE; isCallingUidPersistentSystemProcess: false; realCallingUid: 10148; isRealCallingUidForeground: false; realCallingUidHasAnyVisibleWindow: false; realCallingUidProcState: FOREGROUND_SERVICE; isRealCallingUidPersistentSystemProcess: false; originatingPendingIntent: PendingIntentRecord{921ede4 com.bingo.cleaner startActivity}; allowBackgroundActivityStart: false; intent: Intent { cmp=com.bingo.cleaner/.modules.scene.fork.ForkActivityC (has extras) }; callerApp: ProcessRecord{c06f774 13034:com.bingo.cleaner/u0a148}; inVisibleTask: false]
2022-12-25 11:34:59.199 511-4063 ActivityTaskManager pid-511 W startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { flg=0x800000 cmp=com.bingo.cleaner/.modules.scene.fork.ForkActivityC (has extras) }
2022-12-25 11:34:59.200 511-4063 ActivityTaskManager pid-511 E Abort background activity starts from 10148
2022-12-25 11:34:59.209 511-857 ActivityTaskManager pid-511 I START u0 {flg=0x10000000 cmp=com.bingo.cleaner/.modules.scene.fork.ForkActivityC (has extras)} from uid 10148
2022-12-25 11:34:59.210 511-857 ActivityTaskManager pid-511 W Background activity start [callingPackage: com.bingo.cleaner; callingUid: 10148; appSwitchAllowed: false; isCallingUidForeground: false; callingUidHasAnyVisibleWindow: false; callingUidProcState: FOREGROUND_SERVICE; isCallingUidPersistentSystemProcess: false; realCallingUid: 10148; isRealCallingUidForeground: false; realCallingUidHasAnyVisibleWindow: false; realCallingUidProcState: FOREGROUND_SERVICE; isRealCallingUidPersistentSystemProcess: false; originatingPendingIntent: null; allowBackgroundActivityStart: false; intent: Intent { flg=0x10000000 cmp=com.bingo.cleaner/.modules.scene.fork.ForkActivityC (has extras) }; callerApp: ProcessRecord{c06f774 13034:com.bingo.cleaner/u0a148}; inVisibleTask: false]
2022-12-25 11:34:59.210 511-857 ActivityTaskManager pid-511 E Abort background activity starts from 10148
2022-12-25 11:34:59.285 511-857 ActivityTaskManager pid-511 I START u0 {cmp=com.bingo.cleaner/.modules.scene.fork.ForkActivityC (has extras)} from uid 10148
2022-12-25 11:34:59.287 511-857 ActivityTaskManager pid-511 W Background activity start [callingPackage: com.bingo.cleaner; callingUid: 10148; appSwitchAllowed: false; isCallingUidForeground: false; callingUidHasAnyVisibleWindow: false; callingUidProcState: FOREGROUND_SERVICE; isCallingUidPersistentSystemProcess: false; realCallingUid: 10148; isRealCallingUidForeground: false; realCallingUidHasAnyVisibleWindow: false; realCallingUidProcState: FOREGROUND_SERVICE; isRealCallingUidPersistentSystemProcess: false; originatingPendingIntent: PendingIntentRecord{921ede4 com.bingo.cleaner startActivity (allowlist: d43f3f6:+30s0ms/0/NOTIFICATION_SERVICE/NotificationManagerService)}; allowBackgroundActivityStart: false; intent: Intent { cmp=com.bingo.cleaner/.modules.scene.fork.ForkActivityC (has extras) }; callerApp: ProcessRecord{c06f774 13034:com.bingo.cleaner/u0a148}; inVisibleTask: false]
2022-12-25 11:34:59.287 511-857 ActivityTaskManager pid-511 W startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { flg=0x800000 cmp=com.bingo.cleaner/.modules.scene.fork.ForkActivityC (has extras) }
2022-12-25 11:34:59.288 511-857 ActivityTaskManager pid-511 E Abort background activity starts from 10148
2022-12-25 11:34:59.288 511-857 ActivityTaskManager pid-511 I START u0 {flg=0x10000000 cmp=com.bingo.cleaner/.modules.scene.fork.ForkActivityC (has extras)} from uid 10148
2022-12-25 11:34:59.288 511-857 ActivityTaskManager pid-511 W Background activity start [callingPackage: com.bingo.cleaner; callingUid: 10148; appSwitchAllowed: false; isCallingUidForeground: false; callingUidHasAnyVisibleWindow: false; callingUidProcState: FOREGROUND_SERVICE; isCallingUidPersistentSystemProcess: false; realCallingUid: 10148; isRealCallingUidForeground: false; realCallingUidHasAnyVisibleWindow: false; realCallingUidProcState: FOREGROUND_SERVICE; isRealCallingUidPersistentSystemProcess: false; originatingPendingIntent: null; allowBackgroundActivityStart: false; intent: Intent { flg=0x10000000 cmp=com.bingo.cleaner/.modules.scene.fork.ForkActivityC (has extras) }; callerApp: ProcessRecord{c06f774 13034:com.bingo.cleaner/u0a148}; inVisibleTask: false]
2022-12-25 11:34:59.289 511-857 ActivityTaskManager pid-511 E Abort background activity starts from 10148
2022-12-25 11:34:59.522 511-543 ActivityTaskManager pid-511 I START u0 {cmp=com.bingo.cleaner/.modules.scene.fork.ForkActivityC (has extras)} from uid 10148
2022-12-25 11:34:59.522 511-543 ActivityTaskManager pid-511 W startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { flg=0x800000 cmp=com.bingo.cleaner/.modules.scene.fork.ForkActivityC (has extras) }
2022-12-25 11:34:59.527 511-543 ActivityTaskManager pid-511 W Can't find TaskDisplayArea to determine support for multi window. Task id=27 attached=false
2022-12-25 11:34:59.606 511-852 ActivityTaskManager pid-511 W Tried to set launchTime (0) < mLastActivityLaunchTime (556847)
2022-12-25 11:34:59.914 511-546 ActivityTaskManager pid-511 I Displayed com.bingo.cleaner/.modules.scene.fork.ForkActivityC: +325ms
Обратите внимание: я намеренно добавил в логарифм пустые строки, чтобы сделать его более понятным. Таким образом, приложение пытается запустить активность 3 раза и получает отказ от системы. Однако на 4-й раз это как-то удается!
Пожалуйста, посмотрите видео моей записи экрана: https://yura-misc.s3.eu-central-1.amazonaws.com/activity_from_bakcground.mov
PS Что я пробовал (из onReceive зарегистрированного во время выполнения широковещательного приемника):
- запуск действия в цикле до 10 раз (чтобы воспроизвести то, что делает пример приложения)
- отображение уведомления вместе с запуском действия (я думал, что уведомление может повысить приоритет моего приложения)
- запуск другой службы переднего плана и запуск активности из нее (я думал, что это также может повысить приоритет моего приложения)
- отправка ожидающего намерения вместо обычного намерения начать действие
Я предполагаю, что это должен быть какой-то взлом, который потенциально является уязвимостью системы Android. Есть ли у вас какие-либо идеи о том, что это может быть или в каком направлении я хотел бы посмотреть?
1 ответ
Я также сталкиваюсь с подобной проблемой. У меня есть база данных, в которой номер телефона время от времени сохраняется, и мое приложение должно вызывать этот номер, даже если мое приложение находится в фоновом режиме. Но когда я попробовал это на эмуляторе Android 12, он работает хорошо. работает в фоновом режиме, но вызов обрывается при запуске ... и когда я попробовал его на Android 10. он не работал в фоновом режиме, но хорошо работает на переднем плане.
У меня также есть уведомление об этом приложении, поэтому процесс не завершается. Я не знаю, что теперь делать!
вы можете увидеть здесь. вы должны получить разрешение SYSTEM_ALERT_WINDOW от пользователя. также здесь приведены несколько условий. .check, и если ваша решится, пожалуйста, напишите сюда. Моя проблема не решена. https://developer.android.com/guide/components/activities/background-starts