Como detectar a alternância entre usuários
Tenho um serviço em execução no modo de primeiro plano e gostaria de detectar a alternância entre sessões de usuário em tablets que executam o Android 4.2 ou superior.
Existe algum receptor de broadcast que eu possa registrar para ser notificado?
Percebi que o Google Music interrompe a reprodução da música assim que outra sessão de usuário é escolhida na tela de bloqueio. Como ele detecta o switch?
RESPOSTA EXPLICADA
Obrigado @CommonsWare pela resposta correta. Vou explicar um pouco mais como detectar um switch de usuário.
Primeiro, esteja ciente de que a documentação diz explicitamente que os receptores devem ser registradosContext.registerReceiver
. Portanto, faça algo como:
UserSwitchReceiver receiver = new UserSwitchReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction( Intent.ACTION_USER_BACKGROUND );
filter.addAction( Intent.ACTION_USER_FOREGROUND );
registerReceiver( receiver, filter );
Em seguida, no receptor, você também pode recuperar o ID do usuário. Aqui está um pequeno trecho:
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 );
}
}