1

Я изучаю разработку приложений для Android для многопрофильных сценариев и создал простой сервис, который отображает тост-сообщение каждые несколько секунд. Услуга вызывает startForeground.Показывать тост/уведомление в любом профиле пользователя из службы

Как и ожидалось, сообщения с тостами отображаются, и на панели уведомлений отображается уведомление (требуется startForeground).

Обновление: тосты показано с помощью обработчика, следуя такой же подход, как было рекомендовано в ответах:

Handler handler =new Handler(); 
handler.post(new Runnable() { 
public void run() { 
    Toast.makeText(applicationContext, "hi", Toast.LENGTH_LONG).show() 
} 

}); не

ОДНАКО, при входе на другой профиль пользователя:

  • уведомление больше не присутствует в строке уведомлений, и
  • тостов больше не появляются.

Я знаю, что служба по-прежнему работает, как он продолжает выводить лог сообщений (adb logcat), и нет никаких сообщений об ошибках, которые указывают на этот вызов, чтобы показать тост неудачу:

Я пытался программно останавливая и повторно запуская службу после входа в новый профиль пользователя, но без везения. Если приложение повторно заново запущено в новом профиле пользователя, появятся тосты и уведомление do.

Это не системное приложение, поэтому разрешение на доступ к системным приложениям не будет приемлемым.

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

+0

Вы должны использовать __Handler__ или __Broadcast Receiver__ для обновления вашего пользовательского интерфейса. – Piyush

+0

Спасибо @Piyush Gupta. I * am * using Handler (обновил вопрос, чтобы отразить это.) Вот как я смог отображать тосты из первого профиля пользователя. Он отлично работает, но при переключении на второй профиль тосты больше не появляются. –

ответ

0

Вы не можете показать Toast from Service. Только UI-поток может выполнять связанные с UI вещи, а Toast - это интерфейс. См. Communicating with the UI Thread.

Вы можете попробовать этот подход:

Добавить к службе:

protected Handler mHandler = new Handler(); 

, а затем вам нужно разместить Runnable показать Тост:

mHandler.post(new Runnable() { 
    public void run() { 
     Toast.makeText(applicationContext, "hi", Toast.LENGTH_LONG).show() 
    } 
}); 
+0

Спасибо Marcin, я делаю это именно так, и обновил вопрос, чтобы уточнить это. Проблема в том, что пока это работает (тосты отображаются) в профиле пользователя, который запустил приложение, тосты перестают появляться при переключении на другой профиль. Можно ли изменить этот код, чтобы сделать тосты в разных профилях или лучше? –

 Смежные вопросы

  • Нет связанных вопросов^_^