# Print output for @column tags ?>
public
class
CrossProfileApps
extends Object
java.lang.Object | |
↳ | android.content.pm.CrossProfileApps |
Class for handling cross profile operations. Apps can use this class to interact with its
instance in any profile that is in getTargetUserProfiles()
. For example, app can
use this class to start its main activity in managed profile.
Constants | |
---|---|
String |
ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED
Broadcast signalling that the receiving app's permission to interact across profiles has changed. |
Public methods | |
---|---|
boolean
|
canInteractAcrossProfiles()
Returns whether the calling package can interact across profiles. |
boolean
|
canRequestInteractAcrossProfiles()
Returns whether the calling package can request to navigate the user to the relevant settings page to request user consent to interact across profiles. |
Intent
|
createRequestInteractAcrossProfilesIntent()
Returns an |
Drawable
|
getProfileSwitchingIconDrawable(UserHandle userHandle)
Return a drawable that calling app can show to user for the semantic of profile switching -- launching its own activity in specified user profile. |
CharSequence
|
getProfileSwitchingLabel(UserHandle userHandle)
Return a label that calling app can show to user for the semantic of profile switching -- launching its own activity in specified user profile. |
List<UserHandle>
|
getTargetUserProfiles()
Return a list of user profiles that that the caller can use when calling other APIs in this class. |
void
|
startActivity(Intent intent, UserHandle targetUser, Activity callingActivity, Bundle options)
Starts the specified activity of the caller package in the specified profile. |
void
|
startActivity(Intent intent, UserHandle targetUser, Activity callingActivity)
Starts the specified activity of the caller package in the specified profile. |
void
|
startMainActivity(ComponentName component, UserHandle targetUser)
Starts the specified main activity of the caller package in the specified profile. |
Inherited methods | |
---|---|
public static final String ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED
Broadcast signalling that the receiving app's permission to interact across profiles has changed. This includes the user, admin, or OEM changing their consent such that the permission for the app to interact across profiles has changed.
This broadcast is not sent when other circumstances result in a change to being able to
interact across profiles in practice, such as the profile being turned off or removed, apps
being uninstalled, etc. The methods canInteractAcrossProfiles()
and canRequestInteractAcrossProfiles()
can be used by apps prior to attempting to interact
across profiles or attempting to request user consent to interact across profiles.
Apps that have set the android:crossProfile
manifest attribute to true
can receive this broadcast in manifest broadcast receivers. Otherwise, it can only be
received by dynamically-registered broadcast receivers.
Constant Value: "android.content.pm.action.CAN_INTERACT_ACROSS_PROFILES_CHANGED"
public boolean canInteractAcrossProfiles ()
Returns whether the calling package can interact across profiles.
Specifically, returns whether the following are all true:
getTargetUserProfiles()
returns a non-empty list for the calling user.DevicePolicyManager.setCrossProfilePackages(ComponentName, Set)
.
If false
, the package's current ability to request user consent to interact across
profiles can be checked with canRequestInteractAcrossProfiles()
. If true
,
user consent can be obtained via createRequestInteractAcrossProfilesIntent()
. The
package can then listen to ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED
broadcasts.
Returns | |
---|---|
boolean |
true if the calling package can interact across profiles. |
Throws | |
---|---|
SecurityException |
if mContext.getPackageName() does not belong to the
calling UID. |
public boolean canRequestInteractAcrossProfiles ()
Returns whether the calling package can request to navigate the user to the relevant settings page to request user consent to interact across profiles.
If true
, the navigation intent can be obtained via createRequestInteractAcrossProfilesIntent()
. The package can then listen to ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED
broadcasts.
Specifically, returns whether the following are all true:
UserManager#getEnabledProfileIds(int)
returns at least one other profile for the
calling user.android.Manifest.permission.INTERACT_ACROSS_PROFILES
in its manifest.Note that in order for the user to be able to grant the consent, the requesting package must be whitelisted by the admin or the OEM and installed in the other profile. If this is not the case the user will be shown a message explaining why they can't grant the consent.
Note that user consent could already be granted if given a return value of true
.
The package's current ability to interact across profiles can be checked with canInteractAcrossProfiles()
.
Returns | |
---|---|
boolean |
true if the calling package can request to interact across profiles. |
public Intent createRequestInteractAcrossProfilesIntent ()
Returns an Intent
to open the settings page that allows the user to decide whether
the calling app can interact across profiles.
The method canRequestInteractAcrossProfiles()
must be returning true
.
Note that the user may already have given consent and the app may already be able to
interact across profiles, even if canRequestInteractAcrossProfiles()
is true
. The current ability to interact across profiles is given by canInteractAcrossProfiles()
.
Returns | |
---|---|
Intent |
an Intent to open the settings page that allows the user to decide whether
the app can interact across profiles
This value cannot be null . |
Throws | |
---|---|
SecurityException |
if mContext.getPackageName() does not belong to the
calling UID, or canRequestInteractAcrossProfiles() is false . |
public Drawable getProfileSwitchingIconDrawable (UserHandle userHandle)
Return a drawable that calling app can show to user for the semantic of profile switching -- launching its own activity in specified user profile. For example, it may return a briefcase icon if the given user handle is the managed profile one.
Parameters | |
---|---|
userHandle |
UserHandle : The UserHandle of the target profile, must be one of the users returned by
getTargetUserProfiles() , otherwise a SecurityException will
be thrown.
This value cannot be null . |
Returns | |
---|---|
Drawable |
an icon that calling app can show user for the semantic of launching its own
activity in specified user profile.
This value cannot be null . |
public CharSequence getProfileSwitchingLabel (UserHandle userHandle)
Return a label that calling app can show to user for the semantic of profile switching -- launching its own activity in specified user profile. For example, it may return "Switch to work" if the given user handle is the managed profile one.
Parameters | |
---|---|
userHandle |
UserHandle : The UserHandle of the target profile, must be one of the users returned by
getTargetUserProfiles() , otherwise a SecurityException will
be thrown.
This value cannot be null . |
Returns | |
---|---|
CharSequence |
a label that calling app can show user for the semantic of launching its own
activity in the specified user profile.
This value cannot be null . |
public List<UserHandle> getTargetUserProfiles ()
Return a list of user profiles that that the caller can use when calling other APIs in this class.
A user profile would be considered as a valid target user profile, provided that:
Returns | |
---|---|
List<UserHandle> |
This value cannot be null . |
See also:
public void startActivity (Intent intent, UserHandle targetUser, Activity callingActivity, Bundle options)
Starts the specified activity of the caller package in the specified profile.
The caller must have the Manifest.permission.INTERACT_ACROSS_PROFILES
,
android.Manifest.permission#INTERACT_ACROSS_USERS
, or android.Manifest.permission#INTERACT_ACROSS_USERS_FULL
permission. Both the caller and
target user profiles must be in the same profile group. The target user must be a valid user
returned from getTargetUserProfiles()
.
Requires Manifest.permission.INTERACT_ACROSS_PROFILES
or android.Manifest.permission.INTERACT_ACROSS_USERS
Parameters | |
---|---|
intent |
Intent : The intent to launch. A component in the caller package must be specified.
This value cannot be null . |
targetUser |
UserHandle : The UserHandle of the profile; must be one of the users returned by
getTargetUserProfiles() if different to the calling user, otherwise a
SecurityException will be thrown.
This value cannot be null . |
callingActivity |
Activity : The activity to start the new activity from for the purposes of
deciding which task the new activity should belong to. If null , the activity
will always be started in a new task.
This value may be null . |
options |
Bundle : The activity options or null . See ActivityOptions .
This value may be null . |
public void startActivity (Intent intent, UserHandle targetUser, Activity callingActivity)
Starts the specified activity of the caller package in the specified profile.
The caller must have the Manifest.permission.INTERACT_ACROSS_PROFILES
,
android.Manifest.permission#INTERACT_ACROSS_USERS
, or android.Manifest.permission#INTERACT_ACROSS_USERS_FULL
permission. Both the caller and
target user profiles must be in the same profile group. The target user must be a valid user
returned from getTargetUserProfiles()
.
Requires Manifest.permission.INTERACT_ACROSS_PROFILES
or android.Manifest.permission.INTERACT_ACROSS_USERS
Parameters | |
---|---|
intent |
Intent : The intent to launch. A component in the caller package must be specified.
This value cannot be null . |
targetUser |
UserHandle : The UserHandle of the profile; must be one of the users returned by
getTargetUserProfiles() if different to the calling user, otherwise a
SecurityException will be thrown.
This value cannot be null . |
callingActivity |
Activity : The activity to start the new activity from for the purposes of
deciding which task the new activity should belong to. If null , the activity
will always be started in a new task.
This value may be null . |
public void startMainActivity (ComponentName component, UserHandle targetUser)
Starts the specified main activity of the caller package in the specified profile.
Parameters | |
---|---|
component |
ComponentName : The ComponentName of the activity to launch, it must be exported and has
action Intent.ACTION_MAIN , category
Intent.CATEGORY_LAUNCHER . Otherwise, SecurityException will
be thrown.
This value cannot be null . |
targetUser |
UserHandle : The UserHandle of the profile, must be one of the users returned by
getTargetUserProfiles() , otherwise a SecurityException will
be thrown.
This value cannot be null . |