Как обнаружить переключение между пользователями

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

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

Я заметил, что Google Music останавливает воспроизведение музыки, как только на экране блокировки выбирается другой сеанс пользователя. Как он обнаруживает переключатель?


ОБЪЯСНЕНИЕ ОТВЕТА

Спасибо @CommonsWare за правильный ответ. Я объясню немного больше, как обнаружить переключение пользователя.

Во-первых, имейте в виду, что в документации прямо сказано, что получатели должны быть зарегистрированы через Context.registerReceiver. Поэтому сделайте что-то вроде:

UserSwitchReceiver receiver = new UserSwitchReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction( Intent.ACTION_USER_BACKGROUND );
filter.addAction( Intent.ACTION_USER_FOREGROUND );
registerReceiver( receiver, filter );

Затем в приемнике вы также можете получить идентификатор пользователя. Вот небольшой фрагмент:

public class UserSwitchReceiver extends BroadcastReceiver {

private static final String TAG = "UserSwitchReceiver";

    @Override
    public void onReceive(Context context, Intent intent) 
    {
        boolean userSentBackground = intent.getAction().equals( Intent.ACTION_USER_BACKGROUND );
        boolean userSentForeground = intent.getAction().equals( Intent.ACTION_USER_FOREGROUND );
        Log.d( TAG, "Switch received. User sent background = " + userSentBackground + "; User sent foreground = " + userSentForeground + ";" );

        int user = intent.getExtras().getInt( "android.intent.extra.user_handle" );
        Log.d( TAG, "user = " + user );
    }
}

person Xavi Gil    schedule 13.03.2013    source источник
comment
Я удивлен, что служба продолжает работать в вашем случае. Вы действительно проверили, что он продолжает работать?   -  person Stephan Branczyk    schedule 13.03.2013
comment
Да, это так. С одной стороны, я вижу журналы моего приложения из учетной записи другого пользователя. С другой стороны, когда я возвращаюсь к исходному пользователю (запускаю свою службу), появляется значок уведомления на переднем плане. И в журнале нет сообщения о том, что служба была остановлена.   -  person Xavi Gil    schedule 13.03.2013
comment
Я пробовал приложения для потокового радио из Google Play, и они тоже не убиваются при переключении на другого пользователя.   -  person Xavi Gil    schedule 13.03.2013


Ответы (1)


Попробуйте ACTION_USER_FOREGROUND и ACTION_USER_BACKGROUND. Я ими не пользовался, но они были добавлены в API Level 17, и их описание, похоже, может помочь.

person CommonsWare    schedule 13.03.2013
comment
Если приложение тем временем будет уничтожено, ACTION_USER_FOREGROUND не будет вызываться при переключении обратно на исходного пользователя. Есть ли способ убедиться, что приложение запускается при переключении пользователя (аналогично ACTION_BOOT_COMPLETED запускает приложение при загрузке устройства)? - person Petrakeas; 27.11.2019
comment
@Petrakeas: Извините, этот ответ был 6,5 лет назад, и я не использовал эти трансляции в промежутке времени. - person CommonsWare; 28.11.2019