【问题标题】:How to detect switching between users如何检测用户之间的切换
【发布时间】:2013-03-13 17:18:48
【问题描述】:

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

我可以注册任何广播接收器以获得通知吗?

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


答案解释

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

然后在接收器中您还可以检索用户 ID。这是一个小sn-p:

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

【问题讨论】:

  • 我很惊讶该服务在您的情况下继续运行。你真的检查过它是否继续运行吗?
  • 是的。一方面,我可以从其他用户的帐户中看到我的应用程序日志。另一方面,当我回到原始用户(运行我的服务)时,前台通知图标就在那里。并且日志中没有消息表明服务已停止。
  • 我尝试过 Google Play 中的广播流媒体应用,切换到其他用户时它们也没有被杀死。

标签: android android-multiple-users


【解决方案1】:

试试ACTION_USER_FOREGROUNDACTION_USER_BACKGROUND。我没有使用它们,但它们是在 API 级别 17 中添加的,它们的描述似乎可能会有所帮助。

【讨论】:

  • 如果应用程序在此期间被杀死,切换回原始用户时不会调用 ACTION_USER_FOREGROUND。有什么方法可以确保在用户切换时启动应用程序(类似于ACTION_BOOT_COMPLETED 在设备启动时启动应用程序)?
  • @Petrakeas:对不起,这个答案是 6.5 年前的,我暂时没有使用过这些广播。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 2020-12-15
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多