Jak wykryć przełączanie między użytkownikami

Mam usługę działającą w trybie pierwszoplanowym i chciałbym wykryć przełączanie między sesjami użytkowników na tabletach z Androidem 4.2 lub nowszym.

Czy jest jakiś odbiornik, który mogę zarejestrować, aby otrzymać powiadomienie?

Zauważyłem, że Google Music zatrzymuje odtwarzanie muzyki, gdy na ekranie blokady zostanie wybrana inna sesja użytkownika. W jaki sposób wykrywa przełącznik?

ODPOWIEDŹ

Dziękujemy @CommonsWare za poprawną odpowiedź. Wyjaśnię nieco więcej, jak wykryć przełącznik użytkownika.

Najpierw należy pamiętać, że dokumentacja wyraźnie mówi, że odbiorniki muszą być zarejestrowane przezContext.registerReceiver. Zrób więc coś takiego:

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

Następnie w odbiorniku możesz również pobrać identyfikator użytkownika. Oto mały fragment:

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 );
    }
}

questionAnswers(1)

yourAnswerToTheQuestion