android студия получает объект Activity из сервиса - PullRequest
0 голосов
/ 30 мая 2020

У меня есть приложение со службой, которое работает полностью в фоновом режиме, но иногда мне нужно изменить содержимое в активности переднего плана, а пока скажем, я хочу показать Toast.

сначала я проверяю, открыто ли приложение как передний план

 public boolean isForeground(String myPackage) {
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> runningTaskInfo = manager.getRunningTasks(1);
    ComponentName componentInfo = runningTaskInfo.get(0).topActivity;
    return componentInfo.getPackageName().equals(myPackage);
}

затем я хочу знать, какова текущая активность

  String PKG_Name = componentInfo.getPackageName();

, это даст мне имя, но я хочу получить объект Activity, чтобы сделать что-то вроде этого:

activity.runOnUiThread(new Runnable() {
    public void run() {
        Toast.makeText(activity, "Hello", Toast.LENGTH_SHORT).show();
    }
});

как я могу это сделать? если это невозможно, есть ли способ отправить сигнал или сообщение службе, чтобы сообщить об этом?

1 Ответ

0 голосов
/ 30 мая 2020

Для этого у вас есть два варианта: если вы нормально показываете только тост и не взаимодействуете с другими элементами, вы можете реализовать широковещательный приемник и сделать свое собственное намерение с помощью настраиваемого действия Intent int= new Intent(); int.setAction("Your custom string here");, а затем опубликовать тост в своем приемник braodcast,

OR

вы можете использовать настраиваемый обработчик для взаимодействия со всеми объектами на переднем плане и активностью, вот некоторые учебные материалы для него, https://developer.android.com/training/multiple-threads/communicate-ui

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...