Запустить приложение из сервиса (Flutter: Android) - PullRequest
0 голосов
/ 13 июля 2020

Я создал плагин во Flutter, чтобы показывать заголовки чата, как это делает Facebook Messenger. Из чата я должен открыть специальный экран c. Я не знаю, как запустить приложение flutter из моего BroadcastReceiver. Пока у меня есть этот код:

  private BroadcastReceiver createReceiver(final EventChannel.EventSink eventSink){
    return new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
        Bundle b = intent.getExtras();
        if(b != null) {
          HashMap<String, Object> data = (HashMap<String, Object>) b.getSerializable(KEY_DATA);
          boolean showWhenLocked = data.get("SHOW_WHEN_LOCKED") == null ? false : (boolean) data.get("SHOW_WHEN_LOCKED");

          if(showWhenLocked) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
              mActivity.setShowWhenLocked(true);
              mActivity.setTurnScreenOn(true);
            } else {
              Window window = mActivity.getWindow();
              window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
              window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
              window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
            }
          }

          Log.d("ChatheadsPlugin", "BroadcastReceiver onReceive intent for eventSink: " + data);
          eventSink.success(data);
        }
      }
    };
  }

Во-первых, я хочу запустить здесь основное действие приложения. И если есть возможность, я хочу запустить его с возможностью SHOW_WHEN_LOCKED!

1 Ответ

1 голос
/ 13 июля 2020

Мне удалось запустить активность флаттера из Android следующим образом:

  1. Сначала я в своем плагине добавил MainActivity, который переопределяет FlutterActivity.

  2. Затем я создал новое намерение с флагом для создания нового действия

    Намерение намерения = новое намерение (MyService.this, MainActivity.class); intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);

  3. Затем началось действие, как обычно,

    startActivity (intent);

...