2013-03-13 50 views
13

我有一个服务在前台模式下运行,我想检测运行Android 4.2或更高版本的平板电脑上的用户会话之间的切换。如何检测用户之间的切换

有没有我可以注册的广播接收器来获得通知?

我注意到,一旦在锁定屏幕上选择了另一个用户会话,Google音乐就会停止音乐播放。它如何检测交换机?


ANSWER EXPLAINED

感谢@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); 
    } 
} 
+2

我很惊讶,服务继续在你的情况下运行。你真的检查过它继续吗? – 2013-03-13 17:25:55

+0

是的。一方面,我可以看到我的应用程序的日志形成另一个用户的帐户。另一方面,当我回到原始用户(运行我的服务)时,前台通知图标就在那里。日志中没有指示服务已停止的消息。 – 2013-03-13 17:36:50

+0

我已经尝试了Google Play的广播流应用,并且在切换到其他用户时也不会死亡。 – 2013-03-13 17:53:04

回答