9

I have a service that runs in the background that monitors the foreground activity. At present this does not distinguish between users (multi user accounts Android 4.2). Is there a way that the service can compare the user it is running under with that of the foreground activity? I am only interested in activities of the same user account that the service is running under.

I know I can use:

android.os.Process.myUserHandle()

to get the UserHandle that the service is running under. But I can't see anything in the docs that can give me the UserHandle of a running activity (ActivityManager.RunningAppProcessInfo etc).

Any ideas?

stevev
  • 321
  • 1
  • 5
  • 8

2 Answers2

6

Activity always runs as user returned by android.os.Process.myUserHandle().

ejboy
  • 4,081
  • 5
  • 30
  • 32
4

From inside the service, you can use android.os.Binder.getCallingUid() to get the full kernel uid of the process containing the Activity that's calling the service. Run this result through android.os.Process.getUserId() to get the two digit Android user handle and compare it with android.os.Process.myUserHandle().

Paul Ratazzi
  • 6,289
  • 3
  • 38
  • 50
  • 2
    You cannot convert UID to userId using public API. UserHandle.getUserId is not public. – ejboy Jan 13 '16 at 21:39