Служба Flutter запускается при загрузке приемника, но не вызывает приложение FlutterAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Служба Flutter запускается при загрузке приемника, но не вызывает приложение Flutter

Сообщение Anonymous »

Я разрабатываю блокировщик приложений Flutter. Идея проста: пользователь открывает отслеживаемое приложение, а затем перенаправляется на экран моего приложения. Экран имеет несколько контроллеров, поэтому я делаю его в флаттере.
Когда пользователь открывает приложение, служба запускается без проблем. Однако при загрузке приемника, хотя я вижу уведомление о запуске службы, когда я открываю «отслеживаемое приложение», оно не перенаправляется на экран моего приложения. Я подозреваю, что приложение не может достичь конечной точки флаттера, или по какой-то причине «домашняя» посадка не началась, поэтому я не могу открыть экран в приложении.
Вот мой основной код активности:

Код: Выделить всё

override fun onCreate(savedInstanceState: Bundle?) {
Log.d("MainActivity", "onCreate called")
super.onCreate(savedInstanceState)
appControlAccessor.loadAppGroups(this)
checkAndStartService()
// Handle intent extras and pass them to Flutter
handleIntentExtras(intent)
}

override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
Log.e("MainActivity", "configureFlutterEngine")
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
...
}
Вот мой сервисный код:

Код: Выделить всё

override fun onCreate() {
super.onCreate()
Log.d("AppMonitoringService", "App monitoring service created")
registerScreenStateReceiver()
monitorApps()
}

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.d("AppMonitoringService", "On start command called")
val notification = buildServiceNotification()
startForeground(1, notification)
return START_STICKY
}
Вот как служба вызывает флаттер-код:

Код: Выделить всё

    private fun showChallengeSelectionPage(appPackage: String, timeGranted: Int, tracker: AppControlGroupTracker) {
Log.d("AppMonitoringService", "Showing challenge page for $appPackage and tracker id ${tracker.group.id}")
val intent = Intent(this, MainActivity::class.java)
intent.putExtra("route", "/challengeSelection")
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP
startActivity(intent)
}
Вот как Flutter его получает:

Код: Выделить всё

class MyApp extends StatelessWidget {
const MyApp({super.key});

@override
Widget build(BuildContext context) {
return MaterialApp(
...
home: HomePage(),
routes: {
...
"/challengeSelection": (context) => ChallengeSelectionPage(),
},
);
}
}
А вот код приемника загрузки:

Код: Выделить всё

class BootUpReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
try {
context.stopService(Intent(context, AppMonitoringService::class.java))
} catch (e: Exception) {
e.printStackTrace()
Log.e("BootUpReceiver", "Error stopping service: ${e.message} ; " + e.stackTraceToString())
}

val serviceIntent = Intent(context, AppMonitoringService::class.java)
context.startForegroundService(serviceIntent)
}
}
Любая помощь приветствуется. Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/797 ... lutter-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»