blob: 72981a77327730bd915bb28bd2e23f11733eebec [file] [log] [blame]
/*
* Copyright (C) 2006 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.content.pm;
import android.Manifest;
import android.annotation.CheckResult;
import android.annotation.DrawableRes;
import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.StringRes;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.annotation.UnsupportedAppUsage;
import android.annotation.UserIdInt;
import android.annotation.XmlRes;
import android.app.ActivityManager;
import android.app.PackageDeleteObserver;
import android.app.PackageInstallObserver;
import android.app.admin.DevicePolicyManager;
import android.app.usage.StorageStatsManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentSender;
import android.content.pm.PackageParser.PackageParserException;
import android.content.pm.dex.ArtManager;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.PersistableBundle;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.storage.StorageManager;
import android.os.storage.VolumeInfo;
import android.util.AndroidException;
import android.util.Log;
import com.android.internal.util.ArrayUtils;
import dalvik.system.VMRuntime;
import java.io.File;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List;
import java.util.Locale;
/**
* Class for retrieving various kinds of information related to the application
* packages that are currently installed on the device.
*
* You can find this class through {@link Context#getPackageManager}.
*/
public abstract class PackageManager {
private static final String TAG = "PackageManager";
/** {@hide} */
public static final boolean APPLY_DEFAULT_TO_DEVICE_PROTECTED_STORAGE = true;
/**
* This exception is thrown when a given package, application, or component
* name cannot be found.
*/
public static class NameNotFoundException extends AndroidException {
public NameNotFoundException() {
}
public NameNotFoundException(String name) {
super(name);
}
}
/**
* Listener for changes in permissions granted to a UID.
*
* @hide
*/
@SystemApi
public interface OnPermissionsChangedListener {
/**
* Called when the permissions for a UID change.
* @param uid The UID with a change.
*/
public void onPermissionsChanged(int uid);
}
/**
* As a guiding principle:
* <p>
* {@code GET_} flags are used to request additional data that may have been
* elided to save wire space.
* <p>
* {@code MATCH_} flags are used to include components or packages that
* would have otherwise been omitted from a result set by current system
* state.
*/
/** @hide */
@IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
GET_ACTIVITIES,
GET_CONFIGURATIONS,
GET_GIDS,
GET_INSTRUMENTATION,
GET_INTENT_FILTERS,
GET_META_DATA,
GET_PERMISSIONS,
GET_PROVIDERS,
GET_RECEIVERS,
GET_SERVICES,
GET_SHARED_LIBRARY_FILES,
GET_SIGNATURES,
GET_SIGNING_CERTIFICATES,
GET_URI_PERMISSION_PATTERNS,
MATCH_UNINSTALLED_PACKAGES,
MATCH_DISABLED_COMPONENTS,
MATCH_DISABLED_UNTIL_USED_COMPONENTS,
MATCH_SYSTEM_ONLY,
MATCH_FACTORY_ONLY,
MATCH_DEBUG_TRIAGED_MISSING,
MATCH_INSTANT,
MATCH_APEX,
GET_DISABLED_COMPONENTS,
GET_DISABLED_UNTIL_USED_COMPONENTS,
GET_UNINSTALLED_PACKAGES,
MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS,
})
@Retention(RetentionPolicy.SOURCE)
public @interface PackageInfoFlags {}
/** @hide */
@IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
GET_META_DATA,
GET_SHARED_LIBRARY_FILES,
MATCH_UNINSTALLED_PACKAGES,
MATCH_SYSTEM_ONLY,
MATCH_DEBUG_TRIAGED_MISSING,
MATCH_DISABLED_COMPONENTS,
MATCH_DISABLED_UNTIL_USED_COMPONENTS,
MATCH_INSTANT,
MATCH_STATIC_SHARED_LIBRARIES,
GET_DISABLED_UNTIL_USED_COMPONENTS,
GET_UNINSTALLED_PACKAGES,
MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ApplicationInfoFlags {}
/** @hide */
@IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
GET_META_DATA,
GET_SHARED_LIBRARY_FILES,
MATCH_ALL,
MATCH_DEBUG_TRIAGED_MISSING,
MATCH_DEFAULT_ONLY,
MATCH_DISABLED_COMPONENTS,
MATCH_DISABLED_UNTIL_USED_COMPONENTS,
MATCH_DIRECT_BOOT_AWARE,
MATCH_DIRECT_BOOT_UNAWARE,
MATCH_SYSTEM_ONLY,
MATCH_UNINSTALLED_PACKAGES,
MATCH_INSTANT,
MATCH_STATIC_SHARED_LIBRARIES,
GET_DISABLED_COMPONENTS,
GET_DISABLED_UNTIL_USED_COMPONENTS,
GET_UNINSTALLED_PACKAGES,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ComponentInfoFlags {}
/** @hide */
@IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
GET_META_DATA,
GET_RESOLVED_FILTER,
GET_SHARED_LIBRARY_FILES,
MATCH_ALL,
MATCH_DEBUG_TRIAGED_MISSING,
MATCH_DISABLED_COMPONENTS,
MATCH_DISABLED_UNTIL_USED_COMPONENTS,
MATCH_DEFAULT_ONLY,
MATCH_DIRECT_BOOT_AWARE,
MATCH_DIRECT_BOOT_UNAWARE,
MATCH_SYSTEM_ONLY,
MATCH_UNINSTALLED_PACKAGES,
MATCH_INSTANT,
GET_DISABLED_COMPONENTS,
GET_DISABLED_UNTIL_USED_COMPONENTS,
GET_UNINSTALLED_PACKAGES,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ResolveInfoFlags {}
/** @hide */
@IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
GET_META_DATA,
})
@Retention(RetentionPolicy.SOURCE)
public @interface PermissionInfoFlags {}
/** @hide */
@IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
GET_META_DATA,
})
@Retention(RetentionPolicy.SOURCE)
public @interface PermissionGroupInfoFlags {}
/** @hide */
@IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
GET_META_DATA,
})
@Retention(RetentionPolicy.SOURCE)
public @interface InstrumentationInfoFlags {}
/**
* {@link PackageInfo} flag: return information about
* activities in the package in {@link PackageInfo#activities}.
*/
public static final int GET_ACTIVITIES = 0x00000001;
/**
* {@link PackageInfo} flag: return information about
* intent receivers in the package in
* {@link PackageInfo#receivers}.
*/
public static final int GET_RECEIVERS = 0x00000002;
/**
* {@link PackageInfo} flag: return information about
* services in the package in {@link PackageInfo#services}.
*/
public static final int GET_SERVICES = 0x00000004;
/**
* {@link PackageInfo} flag: return information about
* content providers in the package in
* {@link PackageInfo#providers}.
*/
public static final int GET_PROVIDERS = 0x00000008;
/**
* {@link PackageInfo} flag: return information about
* instrumentation in the package in
* {@link PackageInfo#instrumentation}.
*/
public static final int GET_INSTRUMENTATION = 0x00000010;
/**
* {@link PackageInfo} flag: return information about the
* intent filters supported by the activity.
*/
public static final int GET_INTENT_FILTERS = 0x00000020;
/**
* {@link PackageInfo} flag: return information about the
* signatures included in the package.
*
* @deprecated use {@code GET_SIGNING_CERTIFICATES} instead
*/
@Deprecated
public static final int GET_SIGNATURES = 0x00000040;
/**
* {@link ResolveInfo} flag: return the IntentFilter that
* was matched for a particular ResolveInfo in
* {@link ResolveInfo#filter}.
*/
public static final int GET_RESOLVED_FILTER = 0x00000040;
/**
* {@link ComponentInfo} flag: return the {@link ComponentInfo#metaData}
* data {@link android.os.Bundle}s that are associated with a component.
* This applies for any API returning a ComponentInfo subclass.
*/
public static final int GET_META_DATA = 0x00000080;
/**
* {@link PackageInfo} flag: return the
* {@link PackageInfo#gids group ids} that are associated with an
* application.
* This applies for any API returning a PackageInfo class, either
* directly or nested inside of another.
*/
public static final int GET_GIDS = 0x00000100;
/**
* @deprecated replaced with {@link #MATCH_DISABLED_COMPONENTS}
*/
@Deprecated
public static final int GET_DISABLED_COMPONENTS = 0x00000200;
/**
* {@link PackageInfo} flag: include disabled components in the returned info.
*/
public static final int MATCH_DISABLED_COMPONENTS = 0x00000200;
/**
* {@link ApplicationInfo} flag: return the
* {@link ApplicationInfo#sharedLibraryFiles paths to the shared libraries}
* that are associated with an application.
* This applies for any API returning an ApplicationInfo class, either
* directly or nested inside of another.
*/
public static final int GET_SHARED_LIBRARY_FILES = 0x00000400;
/**
* {@link ProviderInfo} flag: return the
* {@link ProviderInfo#uriPermissionPatterns URI permission patterns}
* that are associated with a content provider.
* This applies for any API returning a ProviderInfo class, either
* directly or nested inside of another.
*/
public static final int GET_URI_PERMISSION_PATTERNS = 0x00000800;
/**
* {@link PackageInfo} flag: return information about
* permissions in the package in
* {@link PackageInfo#permissions}.
*/
public static final int GET_PERMISSIONS = 0x00001000;
/**
* @deprecated replaced with {@link #MATCH_UNINSTALLED_PACKAGES}
*/
@Deprecated
public static final int GET_UNINSTALLED_PACKAGES = 0x00002000;
/**
* Flag parameter to retrieve some information about all applications (even
* uninstalled ones) which have data directories. This state could have
* resulted if applications have been deleted with flag
* {@code DONT_DELETE_DATA} with a possibility of being replaced or
* reinstalled in future.
* <p>
* Note: this flag may cause less information about currently installed
* applications to be returned.
*/
public static final int MATCH_UNINSTALLED_PACKAGES = 0x00002000;
/**
* {@link PackageInfo} flag: return information about
* hardware preferences in
* {@link PackageInfo#configPreferences PackageInfo.configPreferences},
* and requested features in {@link PackageInfo#reqFeatures} and
* {@link PackageInfo#featureGroups}.
*/
public static final int GET_CONFIGURATIONS = 0x00004000;
/**
* @deprecated replaced with {@link #MATCH_DISABLED_UNTIL_USED_COMPONENTS}.
*/
@Deprecated
public static final int GET_DISABLED_UNTIL_USED_COMPONENTS = 0x00008000;
/**
* {@link PackageInfo} flag: include disabled components which are in
* that state only because of {@link #COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED}
* in the returned info. Note that if you set this flag, applications
* that are in this disabled state will be reported as enabled.
*/
public static final int MATCH_DISABLED_UNTIL_USED_COMPONENTS = 0x00008000;
/**
* Resolution and querying flag: if set, only filters that support the
* {@link android.content.Intent#CATEGORY_DEFAULT} will be considered for
* matching. This is a synonym for including the CATEGORY_DEFAULT in your
* supplied Intent.
*/
public static final int MATCH_DEFAULT_ONLY = 0x00010000;
/**
* Querying flag: if set and if the platform is doing any filtering of the
* results, then the filtering will not happen. This is a synonym for saying
* that all results should be returned.
* <p>
* <em>This flag should be used with extreme care.</em>
*/
public static final int MATCH_ALL = 0x00020000;
/**
* Querying flag: match components which are direct boot <em>unaware</em> in
* the returned info, regardless of the current user state.
* <p>
* When neither {@link #MATCH_DIRECT_BOOT_AWARE} nor
* {@link #MATCH_DIRECT_BOOT_UNAWARE} are specified, the default behavior is
* to match only runnable components based on the user state. For example,
* when a user is started but credentials have not been presented yet, the
* user is running "locked" and only {@link #MATCH_DIRECT_BOOT_AWARE}
* components are returned. Once the user credentials have been presented,
* the user is running "unlocked" and both {@link #MATCH_DIRECT_BOOT_AWARE}
* and {@link #MATCH_DIRECT_BOOT_UNAWARE} components are returned.
*
* @see UserManager#isUserUnlocked()
*/
public static final int MATCH_DIRECT_BOOT_UNAWARE = 0x00040000;
/**
* Querying flag: match components which are direct boot <em>aware</em> in
* the returned info, regardless of the current user state.
* <p>
* When neither {@link #MATCH_DIRECT_BOOT_AWARE} nor
* {@link #MATCH_DIRECT_BOOT_UNAWARE} are specified, the default behavior is
* to match only runnable components based on the user state. For example,
* when a user is started but credentials have not been presented yet, the
* user is running "locked" and only {@link #MATCH_DIRECT_BOOT_AWARE}
* components are returned. Once the user credentials have been presented,
* the user is running "unlocked" and both {@link #MATCH_DIRECT_BOOT_AWARE}
* and {@link #MATCH_DIRECT_BOOT_UNAWARE} components are returned.
*
* @see UserManager#isUserUnlocked()
*/
public static final int MATCH_DIRECT_BOOT_AWARE = 0x00080000;
/**
* Querying flag: include only components from applications that are marked
* with {@link ApplicationInfo#FLAG_SYSTEM}.
*/
public static final int MATCH_SYSTEM_ONLY = 0x00100000;
/**
* Internal {@link PackageInfo} flag: include only components on the system image.
* This will not return information on any unbundled update to system components.
* @hide
*/
@SystemApi
@TestApi
public static final int MATCH_FACTORY_ONLY = 0x00200000;
/**
* Allows querying of packages installed for any user, not just the specific one. This flag
* is only meant for use by apps that have INTERACT_ACROSS_USERS permission.
* @hide
*/
@SystemApi
public static final int MATCH_ANY_USER = 0x00400000;
/**
* Combination of MATCH_ANY_USER and MATCH_UNINSTALLED_PACKAGES to mean any known
* package.
* @hide
*/
@TestApi
public static final int MATCH_KNOWN_PACKAGES = MATCH_UNINSTALLED_PACKAGES | MATCH_ANY_USER;
/**
* Internal {@link PackageInfo} flag: include components that are part of an
* instant app. By default, instant app components are not matched.
* @hide
*/
@SystemApi
public static final int MATCH_INSTANT = 0x00800000;
/**
* Internal {@link PackageInfo} flag: include only components that are exposed to
* instant apps. Matched components may have been either explicitly or implicitly
* exposed.
* @hide
*/
public static final int MATCH_VISIBLE_TO_INSTANT_APP_ONLY = 0x01000000;
/**
* Internal {@link PackageInfo} flag: include only components that have been
* explicitly exposed to instant apps.
* @hide
*/
public static final int MATCH_EXPLICITLY_VISIBLE_ONLY = 0x02000000;
/**
* Internal {@link PackageInfo} flag: include static shared libraries.
* Apps that depend on static shared libs can always access the version
* of the lib they depend on. System/shell/root can access all shared
* libs regardless of dependency but need to explicitly ask for them
* via this flag.
* @hide
*/
public static final int MATCH_STATIC_SHARED_LIBRARIES = 0x04000000;
/**
* {@link PackageInfo} flag: return the signing certificates associated with
* this package. Each entry is a signing certificate that the package
* has proven it is authorized to use, usually a past signing certificate from
* which it has rotated.
*/
public static final int GET_SIGNING_CERTIFICATES = 0x08000000;
/**
* Internal flag used to indicate that a system component has done their
* homework and verified that they correctly handle packages and components
* that come and go over time. In particular:
* <ul>
* <li>Apps installed on external storage, which will appear to be
* uninstalled while the the device is ejected.
* <li>Apps with encryption unaware components, which will appear to not
* exist while the device is locked.
* </ul>
*
* @see #MATCH_UNINSTALLED_PACKAGES
* @see #MATCH_DIRECT_BOOT_AWARE
* @see #MATCH_DIRECT_BOOT_UNAWARE
* @hide
*/
public static final int MATCH_DEBUG_TRIAGED_MISSING = 0x10000000;
/**
* Internal flag used to indicate that a package is a hidden system app.
* @hide
*/
public static final int MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS = 0x20000000;
/**
* {@link PackageInfo} flag: include APEX packages that are currently
* installed. In APEX terminology, this corresponds to packages that are
* currently active, i.e. mounted and available to other processes of the OS.
* In particular, this flag alone will not match APEX files that are staged
* for activation at next reboot.
* TODO(b/119767311): include uninstalled/inactive APEX if
* MATCH_UNINSTALLED_PACKAGES is set.
*/
public static final int MATCH_APEX = 0x40000000;
/**
* Flag for {@link #addCrossProfileIntentFilter}: if this flag is set: when
* resolving an intent that matches the {@code CrossProfileIntentFilter},
* the current profile will be skipped. Only activities in the target user
* can respond to the intent.
*
* @hide
*/
public static final int SKIP_CURRENT_PROFILE = 0x00000002;
/**
* Flag for {@link #addCrossProfileIntentFilter}: if this flag is set:
* activities in the other profiles can respond to the intent only if no activity with
* non-negative priority in current profile can respond to the intent.
* @hide
*/
public static final int ONLY_IF_NO_MATCH_FOUND = 0x00000004;
/** @hide */
@IntDef(prefix = { "PERMISSION_" }, value = {
PERMISSION_GRANTED,
PERMISSION_DENIED
})
@Retention(RetentionPolicy.SOURCE)
public @interface PermissionResult {}
/**
* Permission check result: this is returned by {@link #checkPermission}
* if the permission has been granted to the given package.
*/
public static final int PERMISSION_GRANTED = 0;
/**
* Permission check result: this is returned by {@link #checkPermission}
* if the permission has not been granted to the given package.
*/
public static final int PERMISSION_DENIED = -1;
/** @hide */
@IntDef(prefix = { "SIGNATURE_" }, value = {
SIGNATURE_MATCH,
SIGNATURE_NEITHER_SIGNED,
SIGNATURE_FIRST_NOT_SIGNED,
SIGNATURE_SECOND_NOT_SIGNED,
SIGNATURE_NO_MATCH,
SIGNATURE_UNKNOWN_PACKAGE,
})
@Retention(RetentionPolicy.SOURCE)
public @interface SignatureResult {}
/**
* Signature check result: this is returned by {@link #checkSignatures}
* if all signatures on the two packages match.
*/
public static final int SIGNATURE_MATCH = 0;
/**
* Signature check result: this is returned by {@link #checkSignatures}
* if neither of the two packages is signed.
*/
public static final int SIGNATURE_NEITHER_SIGNED = 1;
/**
* Signature check result: this is returned by {@link #checkSignatures}
* if the first package is not signed but the second is.
*/
public static final int SIGNATURE_FIRST_NOT_SIGNED = -1;
/**
* Signature check result: this is returned by {@link #checkSignatures}
* if the second package is not signed but the first is.
*/
public static final int SIGNATURE_SECOND_NOT_SIGNED = -2;
/**
* Signature check result: this is returned by {@link #checkSignatures}
* if not all signatures on both packages match.
*/
public static final int SIGNATURE_NO_MATCH = -3;
/**
* Signature check result: this is returned by {@link #checkSignatures}
* if either of the packages are not valid.
*/
public static final int SIGNATURE_UNKNOWN_PACKAGE = -4;
/** @hide */
@IntDef(prefix = { "COMPONENT_ENABLED_STATE_" }, value = {
COMPONENT_ENABLED_STATE_DEFAULT,
COMPONENT_ENABLED_STATE_ENABLED,
COMPONENT_ENABLED_STATE_DISABLED,
COMPONENT_ENABLED_STATE_DISABLED_USER,
COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED,
})
@Retention(RetentionPolicy.SOURCE)
public @interface EnabledState {}
/**
* Flag for {@link #setApplicationEnabledSetting(String, int, int)} and
* {@link #setComponentEnabledSetting(ComponentName, int, int)}: This
* component or application is in its default enabled state (as specified in
* its manifest).
* <p>
* Explicitly setting the component state to this value restores it's
* enabled state to whatever is set in the manifest.
*/
public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0;
/**
* Flag for {@link #setApplicationEnabledSetting(String, int, int)}
* and {@link #setComponentEnabledSetting(ComponentName, int, int)}: This
* component or application has been explictily enabled, regardless of
* what it has specified in its manifest.
*/
public static final int COMPONENT_ENABLED_STATE_ENABLED = 1;
/**
* Flag for {@link #setApplicationEnabledSetting(String, int, int)}
* and {@link #setComponentEnabledSetting(ComponentName, int, int)}: This
* component or application has been explicitly disabled, regardless of
* what it has specified in its manifest.
*/
public static final int COMPONENT_ENABLED_STATE_DISABLED = 2;
/**
* Flag for {@link #setApplicationEnabledSetting(String, int, int)} only: The
* user has explicitly disabled the application, regardless of what it has
* specified in its manifest. Because this is due to the user's request,
* they may re-enable it if desired through the appropriate system UI. This
* option currently <strong>cannot</strong> be used with
* {@link #setComponentEnabledSetting(ComponentName, int, int)}.
*/
public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3;
/**
* Flag for {@link #setApplicationEnabledSetting(String, int, int)} only: This
* application should be considered, until the point where the user actually
* wants to use it. This means that it will not normally show up to the user
* (such as in the launcher), but various parts of the user interface can
* use {@link #GET_DISABLED_UNTIL_USED_COMPONENTS} to still see it and allow
* the user to select it (as for example an IME, device admin, etc). Such code,
* once the user has selected the app, should at that point also make it enabled.
* This option currently <strong>can not</strong> be used with
* {@link #setComponentEnabledSetting(ComponentName, int, int)}.
*/
public static final int COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED = 4;
/** @hide */
@IntDef(flag = true, prefix = { "INSTALL_" }, value = {
INSTALL_FORWARD_LOCK,
INSTALL_REPLACE_EXISTING,
INSTALL_ALLOW_TEST,
INSTALL_EXTERNAL,
INSTALL_INTERNAL,
INSTALL_FROM_ADB,
INSTALL_ALL_USERS,
INSTALL_ALLOW_DOWNGRADE,
INSTALL_GRANT_RUNTIME_PERMISSIONS,
INSTALL_FORCE_VOLUME_UUID,
INSTALL_FORCE_PERMISSION_PROMPT,
INSTALL_INSTANT_APP,
INSTALL_DONT_KILL_APP,
INSTALL_FORCE_SDK,
INSTALL_FULL_APP,
INSTALL_ALLOCATE_AGGRESSIVE,
})
@Retention(RetentionPolicy.SOURCE)
public @interface InstallFlags {}
/**
* Flag parameter for {@link #installPackage} to indicate that this package
* should be installed as forward locked, i.e. only the app itself should
* have access to its code and non-resource assets.
*
* @deprecated new installs into ASEC containers are no longer supported.
* @hide
*/
@Deprecated
public static final int INSTALL_FORWARD_LOCK = 0x00000001;
/**
* Flag parameter for {@link #installPackage} to indicate that you want to
* replace an already installed package, if one exists.
*
* @hide
*/
@UnsupportedAppUsage
public static final int INSTALL_REPLACE_EXISTING = 0x00000002;
/**
* Flag parameter for {@link #installPackage} to indicate that you want to
* allow test packages (those that have set android:testOnly in their
* manifest) to be installed.
* @hide
*/
public static final int INSTALL_ALLOW_TEST = 0x00000004;
/**
* Flag parameter for {@link #installPackage} to indicate that this package
* must be installed to an ASEC on a {@link VolumeInfo#TYPE_PUBLIC}.
*
* @deprecated new installs into ASEC containers are no longer supported;
* use adoptable storage instead.
* @hide
*/
@Deprecated
public static final int INSTALL_EXTERNAL = 0x00000008;
/**
* Flag parameter for {@link #installPackage} to indicate that this package
* must be installed to internal storage.
*
* @hide
*/
public static final int INSTALL_INTERNAL = 0x00000010;
/**
* Flag parameter for {@link #installPackage} to indicate that this install
* was initiated via ADB.
*
* @hide
*/
public static final int INSTALL_FROM_ADB = 0x00000020;
/**
* Flag parameter for {@link #installPackage} to indicate that this install
* should immediately be visible to all users.
*
* @hide
*/
public static final int INSTALL_ALL_USERS = 0x00000040;
/**
* Flag parameter for {@link #installPackage} to indicate that it is okay
* to install an update to an app where the newly installed app has a lower
* version code than the currently installed app. This is permitted only if
* the currently installed app is marked debuggable.
*
* @hide
*/
public static final int INSTALL_ALLOW_DOWNGRADE = 0x00000080;
/**
* Flag parameter for {@link #installPackage} to indicate that all runtime
* permissions should be granted to the package. If {@link #INSTALL_ALL_USERS}
* is set the runtime permissions will be granted to all users, otherwise
* only to the owner.
*
* @hide
*/
public static final int INSTALL_GRANT_RUNTIME_PERMISSIONS = 0x00000100;
/** {@hide} */
public static final int INSTALL_FORCE_VOLUME_UUID = 0x00000200;
/**
* Flag parameter for {@link #installPackage} to indicate that we always want to force
* the prompt for permission approval. This overrides any special behaviour for internal
* components.
*
* @hide
*/
public static final int INSTALL_FORCE_PERMISSION_PROMPT = 0x00000400;
/**
* Flag parameter for {@link #installPackage} to indicate that this package is
* to be installed as a lightweight "ephemeral" app.
*
* @hide
*/
public static final int INSTALL_INSTANT_APP = 0x00000800;
/**
* Flag parameter for {@link #installPackage} to indicate that this package contains
* a feature split to an existing application and the existing application should not
* be killed during the installation process.
*
* @hide
*/
public static final int INSTALL_DONT_KILL_APP = 0x00001000;
/**
* Flag parameter for {@link #installPackage} to indicate that this package is an
* upgrade to a package that refers to the SDK via release letter or is targeting an SDK via
* release letter that the current build does not support.
*
* @hide
*/
public static final int INSTALL_FORCE_SDK = 0x00002000;
/**
* Flag parameter for {@link #installPackage} to indicate that this package is
* to be installed as a heavy weight app. This is fundamentally the opposite of
* {@link #INSTALL_INSTANT_APP}.
*
* @hide
*/
public static final int INSTALL_FULL_APP = 0x00004000;
/**
* Flag parameter for {@link #installPackage} to indicate that this package
* is critical to system health or security, meaning the system should use
* {@link StorageManager#FLAG_ALLOCATE_AGGRESSIVE} internally.
*
* @hide
*/
public static final int INSTALL_ALLOCATE_AGGRESSIVE = 0x00008000;
/**
* Flag parameter for {@link #installPackage} to indicate that this package
* is a virtual preload.
*
* @hide
*/
public static final int INSTALL_VIRTUAL_PRELOAD = 0x00010000;
/**
* Flag parameter for {@link #installPackage} to indicate that this package
* is an APEX package
*
* @hide
*/
public static final int INSTALL_APEX = 0x00020000;
/** @hide */
@IntDef(flag = true, prefix = { "DONT_KILL_APP" }, value = {
DONT_KILL_APP
})
@Retention(RetentionPolicy.SOURCE)
public @interface EnabledFlags {}
/**
* Flag parameter for
* {@link #setComponentEnabledSetting(android.content.ComponentName, int, int)} to indicate
* that you don't want to kill the app containing the component. Be careful when you set this
* since changing component states can make the containing application's behavior unpredictable.
*/
public static final int DONT_KILL_APP = 0x00000001;
/** @hide */
@IntDef(prefix = { "INSTALL_REASON_" }, value = {
INSTALL_REASON_UNKNOWN,
INSTALL_REASON_POLICY,
INSTALL_REASON_DEVICE_RESTORE,
INSTALL_REASON_DEVICE_SETUP,
INSTALL_REASON_USER
})
@Retention(RetentionPolicy.SOURCE)
public @interface InstallReason {}
/**
* Code indicating that the reason for installing this package is unknown.
*/
public static final int INSTALL_REASON_UNKNOWN = 0;
/**
* Code indicating that this package was installed due to enterprise policy.
*/
public static final int INSTALL_REASON_POLICY = 1;
/**
* Code indicating that this package was installed as part of restoring from another device.
*/
public static final int INSTALL_REASON_DEVICE_RESTORE = 2;
/**
* Code indicating that this package was installed as part of device setup.
*/
public static final int INSTALL_REASON_DEVICE_SETUP = 3;
/**
* Code indicating that the package installation was initiated by the user.
*/
public static final int INSTALL_REASON_USER = 4;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* on success.
*
* @hide
*/
@SystemApi
public static final int INSTALL_SUCCEEDED = 1;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the package is already installed.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_ALREADY_EXISTS = -1;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the package archive file is invalid.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_INVALID_APK = -2;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the URI passed in is invalid.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_INVALID_URI = -3;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the package manager service found that the device didn't have enough storage space to
* install the app.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_INSUFFICIENT_STORAGE = -4;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if a package is already installed with the same name.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_DUPLICATE_PACKAGE = -5;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the requested shared user does not exist.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_NO_SHARED_USER = -6;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if a previously installed package of the same name has a different signature than the new
* package (and the old package's data was not removed).
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package is requested a shared user which is already installed on the device and
* does not have matching signature.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package uses a shared library that is not available.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package uses a shared library that is not available.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package failed while optimizing and validating its dex files, either because there
* was not enough storage or the validation failed.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_DEXOPT = -11;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package failed because the current SDK version is older than that required by the
* package.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_OLDER_SDK = -12;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package failed because it contains a content provider with the same authority as a
* provider already installed in the system.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_CONFLICTING_PROVIDER = -13;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package failed because the current SDK version is newer than that required by the
* package.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_NEWER_SDK = -14;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package failed because it has specified that it is a test-only package and the
* caller has not supplied the {@link #INSTALL_ALLOW_TEST} flag.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_TEST_ONLY = -15;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the package being installed contains native code, but none that is compatible with the
* device's CPU_ABI.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package uses a feature that is not available.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_MISSING_FEATURE = -17;
// ------ Errors related to sdcard
/**
* Installation return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if a secure container mount point couldn't be
* accessed on external media.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_CONTAINER_ERROR = -18;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package couldn't be installed in the specified install location.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package couldn't be installed in the specified install location because the media
* is not available.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_MEDIA_UNAVAILABLE = -20;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package couldn't be installed because the verification timed out.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_VERIFICATION_TIMEOUT = -21;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package couldn't be installed because the verification did not succeed.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_VERIFICATION_FAILURE = -22;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the package changed from what the calling program expected.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package is assigned a different UID than it previously held.
*
* @hide
*/
public static final int INSTALL_FAILED_UID_CHANGED = -24;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package has an older version code than the currently installed package.
*
* @hide
*/
public static final int INSTALL_FAILED_VERSION_DOWNGRADE = -25;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the old package has target SDK high enough to support runtime permission and the new
* package has target SDK low enough to not support runtime permissions.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26;
/**
* Installation return code: this is passed in the {@link PackageInstaller#EXTRA_LEGACY_STATUS}
* if the new package attempts to downgrade the target sandbox version of the app.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_SANDBOX_VERSION_DOWNGRADE = -27;
/**
* Installation parse return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser was given a path that is not a
* file, or does not end with the expected '.apk' extension.
*
* @hide
*/
@SystemApi
public static final int INSTALL_PARSE_FAILED_NOT_APK = -100;
/**
* Installation parse return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser was unable to retrieve the
* AndroidManifest.xml file.
*
* @hide
*/
@SystemApi
public static final int INSTALL_PARSE_FAILED_BAD_MANIFEST = -101;
/**
* Installation parse return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser encountered an unexpected
* exception.
*
* @hide
*/
@SystemApi
public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102;
/**
* Installation parse return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser did not find any certificates in
* the .apk.
*
* @hide
*/
@SystemApi
public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103;
/**
* Installation parse return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser found inconsistent certificates on
* the files in the .apk.
*
* @hide
*/
@SystemApi
public static final int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104;
/**
* Installation parse return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser encountered a
* CertificateEncodingException in one of the files in the .apk.
*
* @hide
*/
@SystemApi
public static final int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105;
/**
* Installation parse return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser encountered a bad or missing
* package name in the manifest.
*
* @hide
*/
@SystemApi
public static final int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106;
/**
* Installation parse return code: tthis is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser encountered a bad shared user id
* name in the manifest.
*
* @hide
*/
@SystemApi
public static final int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107;
/**
* Installation parse return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser encountered some structural
* problem in the manifest.
*
* @hide
*/
@SystemApi
public static final int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108;
/**
* Installation parse return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the parser did not find any actionable tags
* (instrumentation or application) in the manifest.
*
* @hide
*/
@SystemApi
public static final int INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109;
/**
* Installation failed return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the system failed to install the package
* because of system issues.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_INTERNAL_ERROR = -110;
/**
* Installation failed return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the system failed to install the package
* because the user is restricted from installing apps.
*
* @hide
*/
public static final int INSTALL_FAILED_USER_RESTRICTED = -111;
/**
* Installation failed return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the system failed to install the package
* because it is attempting to define a permission that is already defined by some existing
* package.
* <p>
* The package name of the app which has already defined the permission is passed to a
* {@link PackageInstallObserver}, if any, as the {@link #EXTRA_FAILURE_EXISTING_PACKAGE} string
* extra; and the name of the permission being redefined is passed in the
* {@link #EXTRA_FAILURE_EXISTING_PERMISSION} string extra.
*
* @hide
*/
public static final int INSTALL_FAILED_DUPLICATE_PERMISSION = -112;
/**
* Installation failed return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the system failed to install the package
* because its packaged native code did not match any of the ABIs supported by the system.
*
* @hide
*/
public static final int INSTALL_FAILED_NO_MATCHING_ABIS = -113;
/**
* Internal return code for NativeLibraryHelper methods to indicate that the package
* being processed did not contain any native code. This is placed here only so that
* it can belong to the same value space as the other install failure codes.
*
* @hide
*/
@UnsupportedAppUsage
public static final int NO_NATIVE_LIBRARIES = -114;
/** {@hide} */
public static final int INSTALL_FAILED_ABORTED = -115;
/**
* Installation failed return code: instant app installs are incompatible with some
* other installation flags supplied for the operation; or other circumstances such
* as trying to upgrade a system app via an instant app install.
* @hide
*/
public static final int INSTALL_FAILED_INSTANT_APP_INVALID = -116;
/**
* Installation parse return code: this is passed in the
* {@link PackageInstaller#EXTRA_LEGACY_STATUS} if the dex metadata file is invalid or
* if there was no matching apk file for a dex metadata file.
*
* @hide
*/
public static final int INSTALL_FAILED_BAD_DEX_METADATA = -117;
/** @hide */
@IntDef(flag = true, prefix = { "DELETE_" }, value = {
DELETE_KEEP_DATA,
DELETE_ALL_USERS,
DELETE_SYSTEM_APP,
DELETE_DONT_KILL_APP,
DELETE_CHATTY,
})
@Retention(RetentionPolicy.SOURCE)
public @interface DeleteFlags {}
/**
* Flag parameter for {@link #deletePackage} to indicate that you don't want to delete the
* package's data directory.
*
* @hide
*/
public static final int DELETE_KEEP_DATA = 0x00000001;
/**
* Flag parameter for {@link #deletePackage} to indicate that you want the
* package deleted for all users.
*
* @hide
*/
public static final int DELETE_ALL_USERS = 0x00000002;
/**
* Flag parameter for {@link #deletePackage} to indicate that, if you are calling
* uninstall on a system that has been updated, then don't do the normal process
* of uninstalling the update and rolling back to the older system version (which
* needs to happen for all users); instead, just mark the app as uninstalled for
* the current user.
*
* @hide
*/
public static final int DELETE_SYSTEM_APP = 0x00000004;
/**
* Flag parameter for {@link #deletePackage} to indicate that, if you are calling
* uninstall on a package that is replaced to provide new feature splits, the
* existing application should not be killed during the removal process.
*
* @hide
*/
public static final int DELETE_DONT_KILL_APP = 0x00000008;
/**
* Flag parameter for {@link #deletePackage} to indicate that package deletion
* should be chatty.
*
* @hide
*/
public static final int DELETE_CHATTY = 0x80000000;
/**
* Return code for when package deletion succeeds. This is passed to the
* {@link IPackageDeleteObserver} if the system succeeded in deleting the
* package.
*
* @hide
*/
public static final int DELETE_SUCCEEDED = 1;
/**
* Deletion failed return code: this is passed to the
* {@link IPackageDeleteObserver} if the system failed to delete the package
* for an unspecified reason.
*
* @hide
*/
public static final int DELETE_FAILED_INTERNAL_ERROR = -1;
/**
* Deletion failed return code: this is passed to the
* {@link IPackageDeleteObserver} if the system failed to delete the package
* because it is the active DevicePolicy manager.
*
* @hide
*/
public static final int DELETE_FAILED_DEVICE_POLICY_MANAGER = -2;
/**
* Deletion failed return code: this is passed to the
* {@link IPackageDeleteObserver} if the system failed to delete the package
* since the user is restricted.
*
* @hide
*/
public static final int DELETE_FAILED_USER_RESTRICTED = -3;
/**
* Deletion failed return code: this is passed to the
* {@link IPackageDeleteObserver} if the system failed to delete the package
* because a profile or device owner has marked the package as
* uninstallable.
*
* @hide
*/
public static final int DELETE_FAILED_OWNER_BLOCKED = -4;
/** {@hide} */
public static final int DELETE_FAILED_ABORTED = -5;
/**
* Deletion failed return code: this is passed to the
* {@link IPackageDeleteObserver} if the system failed to delete the package
* because the packge is a shared library used by other installed packages.
* {@hide} */
public static final int DELETE_FAILED_USED_SHARED_LIBRARY = -6;
/**
* Return code that is passed to the {@link IPackageMoveObserver} when the
* package has been successfully moved by the system.
*
* @hide
*/
public static final int MOVE_SUCCEEDED = -100;
/**
* Error code that is passed to the {@link IPackageMoveObserver} when the
* package hasn't been successfully moved by the system because of
* insufficient memory on specified media.
*
* @hide
*/
public static final int MOVE_FAILED_INSUFFICIENT_STORAGE = -1;
/**
* Error code that is passed to the {@link IPackageMoveObserver} if the
* specified package doesn't exist.
*
* @hide
*/
public static final int MOVE_FAILED_DOESNT_EXIST = -2;
/**
* Error code that is passed to the {@link IPackageMoveObserver} if the
* specified package cannot be moved since its a system package.
*
* @hide
*/
public static final int MOVE_FAILED_SYSTEM_PACKAGE = -3;
/**
* Error code that is passed to the {@link IPackageMoveObserver} if the
* specified package cannot be moved since its forward locked.
*
* @hide
*/
public static final int MOVE_FAILED_FORWARD_LOCKED = -4;
/**
* Error code that is passed to the {@link IPackageMoveObserver} if the
* specified package cannot be moved to the specified location.
*
* @hide
*/
public static final int MOVE_FAILED_INVALID_LOCATION = -5;
/**
* Error code that is passed to the {@link IPackageMoveObserver} if the
* specified package cannot be moved to the specified location.
*
* @hide
*/
public static final int MOVE_FAILED_INTERNAL_ERROR = -6;
/**
* Error code that is passed to the {@link IPackageMoveObserver} if the
* specified package already has an operation pending in the queue.
*
* @hide
*/
public static final int MOVE_FAILED_OPERATION_PENDING = -7;
/**
* Error code that is passed to the {@link IPackageMoveObserver} if the
* specified package cannot be moved since it contains a device admin.
*
* @hide
*/
public static final int MOVE_FAILED_DEVICE_ADMIN = -8;
/**
* Error code that is passed to the {@link IPackageMoveObserver} if system does not allow
* non-system apps to be moved to internal storage.
*
* @hide
*/
public static final int MOVE_FAILED_3RD_PARTY_NOT_ALLOWED_ON_INTERNAL = -9;
/** @hide */
public static final int MOVE_FAILED_LOCKED_USER = -10;
/**
* Flag parameter for {@link #movePackage} to indicate that
* the package should be moved to internal storage if its
* been installed on external media.
* @hide
*/
@Deprecated
@UnsupportedAppUsage
public static final int MOVE_INTERNAL = 0x00000001;
/**
* Flag parameter for {@link #movePackage} to indicate that
* the package should be moved to external media.
* @hide
*/
@Deprecated
@UnsupportedAppUsage
public static final int MOVE_EXTERNAL_MEDIA = 0x00000002;
/** {@hide} */
public static final String EXTRA_MOVE_ID = "android.content.pm.extra.MOVE_ID";
/**
* Usable by the required verifier as the {@code verificationCode} argument
* for {@link PackageManager#verifyPendingInstall} to indicate that it will
* allow the installation to proceed without any of the optional verifiers
* needing to vote.
*
* @hide
*/
public static final int VERIFICATION_ALLOW_WITHOUT_SUFFICIENT = 2;
/**
* Used as the {@code verificationCode} argument for
* {@link PackageManager#verifyPendingInstall} to indicate that the calling
* package verifier allows the installation to proceed.
*/
public static final int VERIFICATION_ALLOW = 1;
/**
* Used as the {@code verificationCode} argument for
* {@link PackageManager#verifyPendingInstall} to indicate the calling
* package verifier does not vote to allow the installation to proceed.
*/
public static final int VERIFICATION_REJECT = -1;
/**
* Used as the {@code verificationCode} argument for
* {@link PackageManager#verifyIntentFilter} to indicate that the calling
* IntentFilter Verifier confirms that the IntentFilter is verified.
*
* @hide
*/
@SystemApi
public static final int INTENT_FILTER_VERIFICATION_SUCCESS = 1;
/**
* Used as the {@code verificationCode} argument for
* {@link PackageManager#verifyIntentFilter} to indicate that the calling
* IntentFilter Verifier confirms that the IntentFilter is NOT verified.
*
* @hide
*/
@SystemApi
public static final int INTENT_FILTER_VERIFICATION_FAILURE = -1;
/**
* Internal status code to indicate that an IntentFilter verification result is not specified.
*
* @hide
*/
@SystemApi
public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED = 0;
/**
* Used as the {@code status} argument for
* {@link #updateIntentVerificationStatusAsUser} to indicate that the User
* will always be prompted the Intent Disambiguation Dialog if there are two
* or more Intent resolved for the IntentFilter's domain(s).
*
* @hide
*/
@SystemApi
public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK = 1;
/**
* Used as the {@code status} argument for
* {@link #updateIntentVerificationStatusAsUser} to indicate that the User
* will never be prompted the Intent Disambiguation Dialog if there are two
* or more resolution of the Intent. The default App for the domain(s)
* specified in the IntentFilter will also ALWAYS be used.
*
* @hide
*/
@SystemApi
public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS = 2;
/**
* Used as the {@code status} argument for
* {@link #updateIntentVerificationStatusAsUser} to indicate that the User
* may be prompted the Intent Disambiguation Dialog if there are two or more
* Intent resolved. The default App for the domain(s) specified in the
* IntentFilter will also NEVER be presented to the User.
*
* @hide
*/
@SystemApi
public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER = 3;
/**
* Used as the {@code status} argument for
* {@link #updateIntentVerificationStatusAsUser} to indicate that this app
* should always be considered as an ambiguous candidate for handling the
* matching Intent even if there are other candidate apps in the "always"
* state. Put another way: if there are any 'always ask' apps in a set of
* more than one candidate app, then a disambiguation is *always* presented
* even if there is another candidate app with the 'always' state.
*
* @hide
*/
@SystemApi
public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK = 4;
/**
* Can be used as the {@code millisecondsToDelay} argument for
* {@link PackageManager#extendVerificationTimeout}. This is the
* maximum time {@code PackageManager} waits for the verification
* agent to return (in milliseconds).
*/
public static final long MAXIMUM_VERIFICATION_TIMEOUT = 60*60*1000;
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device's
* audio pipeline is low-latency, more suitable for audio applications sensitive to delays or
* lag in sound input or output.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device includes at least one form of audio
* output, as defined in the Android Compatibility Definition Document (CDD)
* <a href="https://source.android.com/compatibility/android-cdd#7_8_audio">section 7.8 Audio</a>.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_AUDIO_OUTPUT = "android.hardware.audio.output";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device has professional audio level of functionality and performance.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_AUDIO_PRO = "android.hardware.audio.pro";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device is capable of communicating with
* other devices via Bluetooth.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device is capable of communicating with
* other devices via Bluetooth Low Energy radio.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_BLUETOOTH_LE = "android.hardware.bluetooth_le";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device has a camera facing away
* from the screen.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CAMERA = "android.hardware.camera";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device's camera supports auto-focus.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CAMERA_AUTOFOCUS = "android.hardware.camera.autofocus";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device has at least one camera pointing in
* some direction, or can support an external camera being connected to it.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CAMERA_ANY = "android.hardware.camera.any";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device can support having an external camera connected to it.
* The external camera may not always be connected or available to applications to use.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CAMERA_EXTERNAL = "android.hardware.camera.external";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device's camera supports flash.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device has a front facing camera.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CAMERA_FRONT = "android.hardware.camera.front";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one
* of the cameras on the device supports the
* {@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL full hardware}
* capability level.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CAMERA_LEVEL_FULL = "android.hardware.camera.level.full";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one
* of the cameras on the device supports the
* {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR manual sensor}
* capability level.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR =
"android.hardware.camera.capability.manual_sensor";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one
* of the cameras on the device supports the
* {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING manual post-processing}
* capability level.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING =
"android.hardware.camera.capability.manual_post_processing";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one
* of the cameras on the device supports the
* {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW RAW}
* capability level.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CAMERA_CAPABILITY_RAW =
"android.hardware.camera.capability.raw";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: At least one
* of the cameras on the device supports the
* {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
* MOTION_TRACKING} capability level.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CAMERA_AR =
"android.hardware.camera.ar";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device is capable of communicating with
* consumer IR devices.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CONSUMER_IR = "android.hardware.consumerir";
/** {@hide} */
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CTS = "android.software.cts";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports one or more methods of
* reporting current location.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_LOCATION = "android.hardware.location";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device has a Global Positioning System
* receiver and can report precise location.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_LOCATION_GPS = "android.hardware.location.gps";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device can report location with coarse
* accuracy using a network-based geolocation system.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_LOCATION_NETWORK = "android.hardware.location.network";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device's
* {@link ActivityManager#isLowRamDevice() ActivityManager.isLowRamDevice()} method returns
* true.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_RAM_LOW = "android.hardware.ram.low";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device's
* {@link ActivityManager#isLowRamDevice() ActivityManager.isLowRamDevice()} method returns
* false.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_RAM_NORMAL = "android.hardware.ram.normal";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device can record audio via a
* microphone.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_MICROPHONE = "android.hardware.microphone";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device can communicate using Near-Field
* Communications (NFC).
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_NFC = "android.hardware.nfc";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports host-
* based NFC card emulation.
*
* TODO remove when depending apps have moved to new constant.
* @hide
* @deprecated
*/
@Deprecated
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_NFC_HCE = "android.hardware.nfc.hce";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports host-
* based NFC card emulation.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports host-
* based NFC-F card emulation.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports uicc-
* based NFC card emulation.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_NFC_OFF_HOST_CARD_EMULATION_UICC =
"android.hardware.nfc.uicc";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports eSE-
* based NFC card emulation.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_NFC_OFF_HOST_CARD_EMULATION_ESE = "android.hardware.nfc.ese";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The Beam API is enabled on the device.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_NFC_BEAM = "android.sofware.nfc.beam";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports any
* one of the {@link #FEATURE_NFC}, {@link #FEATURE_NFC_HOST_CARD_EMULATION},
* or {@link #FEATURE_NFC_HOST_CARD_EMULATION_NFCF} features.
*
* @hide
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_NFC_ANY = "android.hardware.nfc.any";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports the OpenGL ES
* <a href="http://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
* Android Extension Pack</a>.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature(String, int)}: If this feature is supported, the Vulkan native API
* will enumerate at least one {@code VkPhysicalDevice}, and the feature version will indicate
* what level of optional hardware features limits it supports.
* <p>
* Level 0 includes the base Vulkan requirements as well as:
* <ul><li>{@code VkPhysicalDeviceFeatures::textureCompressionETC2}</li></ul>
* <p>
* Level 1 additionally includes:
* <ul>
* <li>{@code VkPhysicalDeviceFeatures::fullDrawIndexUint32}</li>
* <li>{@code VkPhysicalDeviceFeatures::imageCubeArray}</li>
* <li>{@code VkPhysicalDeviceFeatures::independentBlend}</li>
* <li>{@code VkPhysicalDeviceFeatures::geometryShader}</li>
* <li>{@code VkPhysicalDeviceFeatures::tessellationShader}</li>
* <li>{@code VkPhysicalDeviceFeatures::sampleRateShading}</li>
* <li>{@code VkPhysicalDeviceFeatures::textureCompressionASTC_LDR}</li>
* <li>{@code VkPhysicalDeviceFeatures::fragmentStoresAndAtomics}</li>
* <li>{@code VkPhysicalDeviceFeatures::shaderImageGatherExtended}</li>
* <li>{@code VkPhysicalDeviceFeatures::shaderUniformBufferArrayDynamicIndexing}</li>
* <li>{@code VkPhysicalDeviceFeatures::shaderSampledImageArrayDynamicIndexing}</li>
* </ul>
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_VULKAN_HARDWARE_LEVEL = "android.hardware.vulkan.level";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature(String, int)}: If this feature is supported, the Vulkan native API
* will enumerate at least one {@code VkPhysicalDevice}, and the feature version will indicate
* what level of optional compute features that device supports beyond the Vulkan 1.0
* requirements.
* <p>
* Compute level 0 indicates:
* <ul>
* <li>The {@code VK_KHR_variable_pointers} extension and
* {@code VkPhysicalDeviceVariablePointerFeaturesKHR::variablePointers} feature are
supported.</li>
* <li>{@code VkPhysicalDeviceLimits::maxPerStageDescriptorStorageBuffers} is at least 16.</li>
* </ul>
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_VULKAN_HARDWARE_COMPUTE = "android.hardware.vulkan.compute";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature(String, int)}: The version of this feature indicates the highest
* {@code VkPhysicalDeviceProperties::apiVersion} supported by the physical devices that support
* the hardware level indicated by {@link #FEATURE_VULKAN_HARDWARE_LEVEL}. The feature version
* uses the same encoding as Vulkan version numbers:
* <ul>
* <li>Major version number in bits 31-22</li>
* <li>Minor version number in bits 21-12</li>
* <li>Patch version number in bits 11-0</li>
* </ul>
* A version of 1.1.0 or higher also indicates:
* <ul>
* <li>{@code SYNC_FD} external semaphore and fence handles are supported.</li>
* <li>{@code VkPhysicalDeviceSamplerYcbcrConversionFeatures::samplerYcbcrConversion} is
* supported.</li>
* </ul>
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_VULKAN_HARDWARE_VERSION = "android.hardware.vulkan.version";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device includes broadcast radio tuner.
* @hide
*/
@SystemApi
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_BROADCAST_RADIO = "android.hardware.broadcastradio";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device includes an accelerometer.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SENSOR_ACCELEROMETER = "android.hardware.sensor.accelerometer";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device includes a barometer (air
* pressure sensor.)
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SENSOR_BAROMETER = "android.hardware.sensor.barometer";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device includes a magnetometer (compass).
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SENSOR_COMPASS = "android.hardware.sensor.compass";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device includes a gyroscope.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SENSOR_GYROSCOPE = "android.hardware.sensor.gyroscope";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device includes a light sensor.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SENSOR_LIGHT = "android.hardware.sensor.light";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device includes a proximity sensor.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SENSOR_PROXIMITY = "android.hardware.sensor.proximity";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device includes a hardware step counter.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SENSOR_STEP_COUNTER = "android.hardware.sensor.stepcounter";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device includes a hardware step detector.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SENSOR_STEP_DETECTOR = "android.hardware.sensor.stepdetector";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device includes a heart rate monitor.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SENSOR_HEART_RATE = "android.hardware.sensor.heartrate";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The heart rate sensor on this device is an Electrocardiogram.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SENSOR_HEART_RATE_ECG =
"android.hardware.sensor.heartrate.ecg";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device includes a relative humidity sensor.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SENSOR_RELATIVE_HUMIDITY =
"android.hardware.sensor.relative_humidity";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device includes an ambient temperature sensor.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SENSOR_AMBIENT_TEMPERATURE =
"android.hardware.sensor.ambient_temperature";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports high fidelity sensor processing
* capabilities.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_HIFI_SENSORS =
"android.hardware.sensor.hifi_sensors";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device supports a hardware mechanism for invoking an assist gesture.
* @see android.provider.Settings.Secure#ASSIST_GESTURE_ENABLED
* @hide
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_ASSIST_GESTURE = "android.hardware.sensor.assist";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device has a telephony radio with data
* communication support.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_TELEPHONY = "android.hardware.telephony";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device has a CDMA telephony stack.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_TELEPHONY_CDMA = "android.hardware.telephony.cdma";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device has a GSM telephony stack.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device supports telephony carrier restriction mechanism.
*
* <p>Devices declaring this feature must have an implementation of the
* {@link android.telephony.TelephonyManager#getAllowedCarriers} and
* {@link android.telephony.TelephonyManager#setAllowedCarriers}.
* @hide
*/
@SystemApi
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_TELEPHONY_CARRIERLOCK =
"android.hardware.telephony.carrierlock";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device
* supports embedded subscriptions on eUICCs.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_TELEPHONY_EUICC = "android.hardware.telephony.euicc";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device
* supports cell-broadcast reception using the MBMS APIs.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_TELEPHONY_MBMS = "android.hardware.telephony.mbms";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device
* supports attaching to IMS implementations using the ImsService API in telephony.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_TELEPHONY_IMS = "android.hardware.telephony.ims";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports connecting to USB devices
* as the USB host.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_USB_HOST = "android.hardware.usb.host";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports connecting to USB accessories.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_USB_ACCESSORY = "android.hardware.usb.accessory";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The SIP API is enabled on the device.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SIP = "android.software.sip";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports SIP-based VOIP.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SIP_VOIP = "android.software.sip.voip";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The Connection Service API is enabled on the device.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CONNECTION_SERVICE = "android.software.connectionservice";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device's display has a touch screen.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_TOUCHSCREEN = "android.hardware.touchscreen";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device's touch screen supports
* multitouch sufficient for basic two-finger gesture detection.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_TOUCHSCREEN_MULTITOUCH = "android.hardware.touchscreen.multitouch";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device's touch screen is capable of
* tracking two or more fingers fully independently.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT = "android.hardware.touchscreen.multitouch.distinct";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device's touch screen is capable of
* tracking a full hand of fingers fully independently -- that is, 5 or
* more simultaneous independent pointers.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND = "android.hardware.touchscreen.multitouch.jazzhand";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device does not have a touch screen, but
* does support touch emulation for basic events. For instance, the
* device might use a mouse or remote control to drive a cursor, and
* emulate basic touch pointer events like down, up, drag, etc. All
* devices that support android.hardware.touchscreen or a sub-feature are
* presumed to also support faketouch.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_FAKETOUCH = "android.hardware.faketouch";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device does not have a touch screen, but
* does support touch emulation for basic events that supports distinct
* tracking of two or more fingers. This is an extension of
* {@link #FEATURE_FAKETOUCH} for input devices with this capability. Note
* that unlike a distinct multitouch screen as defined by
* {@link #FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT}, these kinds of input
* devices will not actually provide full two-finger gestures since the
* input is being transformed to cursor movement on the screen. That is,
* single finger gestures will move a cursor; two-finger swipes will
* result in single-finger touch events; other two-finger gestures will
* result in the corresponding two-finger touch event.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT = "android.hardware.faketouch.multitouch.distinct";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device does not have a touch screen, but
* does support touch emulation for basic events that supports tracking
* a hand of fingers (5 or more fingers) fully independently.
* This is an extension of
* {@link #FEATURE_FAKETOUCH} for input devices with this capability. Note
* that unlike a multitouch screen as defined by
* {@link #FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND}, not all two finger
* gestures can be detected due to the limitations described for
* {@link #FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT}.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND = "android.hardware.faketouch.multitouch.jazzhand";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device has biometric hardware to detect a fingerprint.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_FINGERPRINT = "android.hardware.fingerprint";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports portrait orientation
* screens. For backwards compatibility, you can assume that if neither
* this nor {@link #FEATURE_SCREEN_LANDSCAPE} is set then the device supports
* both portrait and landscape.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SCREEN_PORTRAIT = "android.hardware.screen.portrait";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports landscape orientation
* screens. For backwards compatibility, you can assume that if neither
* this nor {@link #FEATURE_SCREEN_PORTRAIT} is set then the device supports
* both portrait and landscape.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SCREEN_LANDSCAPE = "android.hardware.screen.landscape";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports live wallpapers.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_LIVE_WALLPAPER = "android.software.live_wallpaper";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports app widgets.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_APP_WIDGETS = "android.software.app_widgets";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports the
* {@link android.R.attr#cantSaveState} API.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_CANT_SAVE_STATE = "android.software.cant_save_state";
/**
* @hide
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports
* {@link android.service.voice.VoiceInteractionService} and
* {@link android.app.VoiceInteractor}.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_VOICE_RECOGNIZERS = "android.software.voice_recognizers";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports a home screen that is replaceable
* by third party applications.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_HOME_SCREEN = "android.software.home_screen";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports adding new input methods implemented
* with the {@link android.inputmethodservice.InputMethodService} API.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_INPUT_METHODS = "android.software.input_methods";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports device policy enforcement via device admins.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_DEVICE_ADMIN = "android.software.device_admin";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports leanback UI. This is
* typically used in a living room television experience, but is a software
* feature unlike {@link #FEATURE_TELEVISION}. Devices running with this
* feature will use resources associated with the "television" UI mode.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_LEANBACK = "android.software.leanback";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports only leanback UI. Only
* applications designed for this experience should be run, though this is
* not enforced by the system.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_LEANBACK_ONLY = "android.software.leanback_only";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports live TV and can display
* contents from TV inputs implemented with the
* {@link android.media.tv.TvInputService} API.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_LIVE_TV = "android.software.live_tv";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports WiFi (802.11) networking.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_WIFI = "android.hardware.wifi";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports Wi-Fi Direct networking.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports Wi-Fi Aware.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_WIFI_AWARE = "android.hardware.wifi.aware";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports Wi-Fi Passpoint and all
* Passpoint related APIs in {@link WifiManager} are supported. Refer to
* {@link WifiManager#addOrUpdatePasspointConfiguration} for more info.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_WIFI_PASSPOINT = "android.hardware.wifi.passpoint";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports Wi-Fi RTT (IEEE 802.11mc).
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_WIFI_RTT = "android.hardware.wifi.rtt";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports LoWPAN networking.
* @hide
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_LOWPAN = "android.hardware.lowpan";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: This is a device dedicated to showing UI
* on a vehicle headunit. A headunit here is defined to be inside a
* vehicle that may or may not be moving. A headunit uses either a
* primary display in the center console and/or additional displays in
* the instrument cluster or elsewhere in the vehicle. Headunit display(s)
* have limited size and resolution. The user will likely be focused on
* driving so limiting driver distraction is a primary concern. User input
* can be a variety of hard buttons, touch, rotary controllers and even mouse-
* like interfaces.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_AUTOMOTIVE = "android.hardware.type.automotive";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: This is a device dedicated to showing UI
* on a television. Television here is defined to be a typical living
* room television experience: displayed on a big screen, where the user
* is sitting far away from it, and the dominant form of input will be
* something like a DPAD, not through touch or mouse.
* @deprecated use {@link #FEATURE_LEANBACK} instead.
*/
@Deprecated
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_TELEVISION = "android.hardware.type.television";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: This is a device dedicated to showing UI
* on a watch. A watch here is defined to be a device worn on the body, perhaps on
* the wrist. The user is very close when interacting with the device.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_WATCH = "android.hardware.type.watch";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: This is a device for IoT and may not have an UI. An embedded
* device is defined as a full stack Android device with or without a display and no
* user-installable apps.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_EMBEDDED = "android.hardware.type.embedded";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: This is a device dedicated to be primarily used
* with keyboard, mouse or touchpad. This includes traditional desktop
* computers, laptops and variants such as convertibles or detachables.
* Due to the larger screen, the device will most likely use the
* {@link #FEATURE_FREEFORM_WINDOW_MANAGEMENT} feature as well.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_PC = "android.hardware.type.pc";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device supports printing.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_PRINTING = "android.software.print";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device supports {@link android.companion.CompanionDeviceManager#associate associating}
* with devices via {@link android.companion.CompanionDeviceManager}.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_COMPANION_DEVICE_SETUP
= "android.software.companion_device_setup";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device can perform backup and restore operations on installed applications.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_BACKUP = "android.software.backup";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: The device supports freeform window management.
* Windows have title bars and can be moved and resized.
*/
// If this feature is present, you also need to set
// com.android.internal.R.config_freeformWindowManagement to true in your configuration overlay.
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_FREEFORM_WINDOW_MANAGEMENT
= "android.software.freeform_window_management";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device supports picture-in-picture multi-window mode.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_PICTURE_IN_PICTURE = "android.software.picture_in_picture";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device supports running activities on secondary displays.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_ACTIVITIES_ON_SECONDARY_DISPLAYS
= "android.software.activities_on_secondary_displays";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device supports creating secondary users and managed profiles via
* {@link DevicePolicyManager}.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_MANAGED_USERS = "android.software.managed_users";
/**
* @hide
* TODO: Remove after dependencies updated b/17392243
*/
public static final String FEATURE_MANAGED_PROFILES = "android.software.managed_users";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device supports verified boot.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_VERIFIED_BOOT = "android.software.verified_boot";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device supports secure removal of users. When a user is deleted the data associated
* with that user is securely deleted and no longer available.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_SECURELY_REMOVES_USERS
= "android.software.securely_removes_users";
/** {@hide} */
@TestApi
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_FILE_BASED_ENCRYPTION
= "android.software.file_based_encryption";
/** {@hide} */
@TestApi
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_ADOPTABLE_STORAGE
= "android.software.adoptable_storage";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device has a full implementation of the android.webkit.* APIs. Devices
* lacking this feature will not have a functioning WebView implementation.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_WEBVIEW = "android.software.webview";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: This device supports ethernet.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_ETHERNET = "android.hardware.ethernet";
/**
* Feature for {@link #getSystemAvailableFeatures} and
* {@link #hasSystemFeature}: This device supports HDMI-CEC.
* @hide
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_HDMI_CEC = "android.hardware.hdmi.cec";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device has all of the inputs necessary to be considered a compatible game controller, or
* includes a compatible game controller in the box.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_GAMEPAD = "android.hardware.gamepad";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device has a full implementation of the android.media.midi.* APIs.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_MIDI = "android.software.midi";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device implements an optimized mode for virtual reality (VR) applications that handles
* stereoscopic rendering of notifications, and disables most monocular system UI components
* while a VR application has user focus.
* Devices declaring this feature must include an application implementing a
* {@link android.service.vr.VrListenerService} that can be targeted by VR applications via
* {@link android.app.Activity#setVrModeEnabled}.
* @deprecated use {@link #FEATURE_VR_MODE_HIGH_PERFORMANCE} instead.
*/
@Deprecated
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_VR_MODE = "android.software.vr.mode";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device implements an optimized mode for virtual reality (VR) applications that handles
* stereoscopic rendering of notifications, disables most monocular system UI components
* while a VR application has user focus and meets extra CDD requirements to provide a
* high-quality VR experience.
* Devices declaring this feature must include an application implementing a
* {@link android.service.vr.VrListenerService} that can be targeted by VR applications via
* {@link android.app.Activity#setVrModeEnabled}.
* and must meet CDD requirements to provide a high-quality VR experience.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_VR_MODE_HIGH_PERFORMANCE
= "android.hardware.vr.high_performance";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device supports autofill of user credentials, addresses, credit cards, etc
* via integration with {@link android.service.autofill.AutofillService autofill
* providers}.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_AUTOFILL = "android.software.autofill";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device implements headtracking suitable for a VR device.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_VR_HEADTRACKING = "android.hardware.vr.headtracking";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device has a StrongBox hardware-backed Keystore.
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_STRONGBOX_KEYSTORE =
"android.hardware.strongbox_keystore";
/**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
* The device has a Keymaster implementation that supports Device ID attestation.
*
* @see DevicePolicyManager#isDeviceIdAttestationSupported
* @hide
*/
@SdkConstant(SdkConstantType.FEATURE)
public static final String FEATURE_DEVICE_ID_ATTESTATION =
"android.software.device_id_attestation";
/**
* Action to external storage service to clean out removed apps.
* @hide
*/
public static final String ACTION_CLEAN_EXTERNAL_STORAGE
= "android.content.pm.CLEAN_EXTERNAL_STORAGE";
/**
* Extra field name for the URI to a verification file. Passed to a package
* verifier.
*
* @hide
*/
public static final String EXTRA_VERIFICATION_URI = "android.content.pm.extra.VERIFICATION_URI";
/**
* Extra field name for the ID of a package pending verification. Passed to
* a package verifier and is used to call back to
* {@link PackageManager#verifyPendingInstall(int, int)}
*/
public static final String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID";
/**
* Extra field name for the package identifier which is trying to install
* the package.
*
* @hide
*/
public static final String EXTRA_VERIFICATION_INSTALLER_PACKAGE
= "android.content.pm.extra.VERIFICATION_INSTALLER_PACKAGE";
/**
* Extra field name for the requested install flags for a package pending
* verification. Passed to a package verifier.
*
* @hide
*/
public static final String EXTRA_VERIFICATION_INSTALL_FLAGS
= "android.content.pm.extra.VERIFICATION_INSTALL_FLAGS";
/**
* Extra field name for the uid of who is requesting to install
* the package.
*
* @hide
*/
public static final String EXTRA_VERIFICATION_INSTALLER_UID
= "android.content.pm.extra.VERIFICATION_INSTALLER_UID";
/**
* Extra field name for the package name of a package pending verification.
*
* @hide
*/
public static final String EXTRA_VERIFICATION_PACKAGE_NAME
= "android.content.pm.extra.VERIFICATION_PACKAGE_NAME";
/**
* Extra field name for the result of a verification, either
* {@link #VERIFICATION_ALLOW}, or {@link #VERIFICATION_REJECT}.
* Passed to package verifiers after a package is verified.
*/
public static final String EXTRA_VERIFICATION_RESULT
= "android.content.pm.extra.VERIFICATION_RESULT";
/**
* Extra field name for the version code of a package pending verification.
* @deprecated Use {@link #EXTRA_VERIFICATION_LONG_VERSION_CODE} instead.
* @hide
*/
@Deprecated
public static final String EXTRA_VERIFICATION_VERSION_CODE
= "android.content.pm.extra.VERIFICATION_VERSION_CODE";
/**
* Extra field name for the long version code of a package pending verification.
*
* @hide
*/
public static final String EXTRA_VERIFICATION_LONG_VERSION_CODE =
"android.content.pm.extra.VERIFICATION_LONG_VERSION_CODE";
/**
* Extra field name for the ID of a intent filter pending verification.
* Passed to an intent filter verifier and is used to call back to
* {@link #verifyIntentFilter}
*
* @hide
*/
public static final String EXTRA_INTENT_FILTER_VERIFICATION_ID
= "android.content.pm.extra.INTENT_FILTER_VERIFICATION_ID";
/**
* Extra field name for the scheme used for an intent filter pending verification. Passed to
* an intent filter verifier and is used to construct the URI to verify against.
*
* Usually this is "https"
*
* @hide
*/
public static final String EXTRA_INTENT_FILTER_VERIFICATION_URI_SCHEME
= "android.content.pm.extra.INTENT_FILTER_VERIFICATION_URI_SCHEME";
/**
* Extra field name for the host names to be used for an intent filter pending verification.
* Passed to an intent filter verifier and is used to construct the URI to verify the
* intent filter.
*
* This is a space delimited list of hosts.
*
* @hide
*/
public static final String EXTRA_INTENT_FILTER_VERIFICATION_HOSTS
= "android.content.pm.extra.INTENT_FILTER_VERIFICATION_HOSTS";
/**
* Extra field name for the package name to be used for an intent filter pending verification.
* Passed to an intent filter verifier and is used to check the verification responses coming
* from the hosts. Each host response will need to include the package name of APK containing
* the intent filter.
*
* @hide
*/
public static final String EXTRA_INTENT_FILTER_VERIFICATION_PACKAGE_NAME
= "android.content.pm.extra.INTENT_FILTER_VERIFICATION_PACKAGE_NAME";
/**
* The action used to request that the user approve a permission request
* from the application.
*
* @hide
*/
@SystemApi
public static final String ACTION_REQUEST_PERMISSIONS =
"android.content.pm.action.REQUEST_PERMISSIONS";
/**
* The names of the requested permissions.
* <p>
* <strong>Type:</strong> String[]
* </p>
*
* @hide
*/
@SystemApi
public static final String EXTRA_REQUEST_PERMISSIONS_NAMES =
"android.content.pm.extra.REQUEST_PERMISSIONS_NAMES";
/**
* The results from the permissions request.
* <p>
* <strong>Type:</strong> int[] of #PermissionResult
* </p>
*
* @hide
*/
@SystemApi
public static final String EXTRA_REQUEST_PERMISSIONS_RESULTS
= "android.content.pm.extra.REQUEST_PERMISSIONS_RESULTS";
/**
* String extra for {@link PackageInstallObserver} in the 'extras' Bundle in case of
* {@link #INSTALL_FAILED_DUPLICATE_PERMISSION}. This extra names the package which provides
* the existing definition for the permission.
* @hide
*/
public static final String EXTRA_FAILURE_EXISTING_PACKAGE
= "android.content.pm.extra.FAILURE_EXISTING_PACKAGE";
/**
* String extra for {@link PackageInstallObserver} in the 'extras' Bundle in case of
* {@link #INSTALL_FAILED_DUPLICATE_PERMISSION}. This extra names the permission that is
* being redundantly defined by the package being installed.
* @hide
*/
public static final String EXTRA_FAILURE_EXISTING_PERMISSION
= "android.content.pm.extra.FAILURE_EXISTING_PERMISSION";
/**
* Permission flag: The permission is set in its current state
* by the user and apps can still request it at runtime.
*
* @hide
*/
@SystemApi
public static final int FLAG_PERMISSION_USER_SET = 1 << 0;
/**
* Permission flag: The permission is set in its current state
* by the user and it is fixed, i.e. apps can no longer request
* this permission.
*
* @hide
*/
@SystemApi
public static final int FLAG_PERMISSION_USER_FIXED = 1 << 1;
/**
* Permission flag: The permission is set in its current state
* by device policy and neither apps nor the user can change
* its state.
*
* @hide
*/
@SystemApi
public static final int FLAG_PERMISSION_POLICY_FIXED = 1 << 2;
/**
* Permission flag: The permission is set in a granted state but
* access to resources it guards is restricted by other means to
* enable revoking a permission on legacy apps that do not support
* runtime permissions. If this permission is upgraded to runtime
* because the app was updated to support runtime permissions, the
* the permission will be revoked in the upgrade process.
*
* @hide
*/
@SystemApi
public static final int FLAG_PERMISSION_REVOKE_ON_UPGRADE = 1 << 3;
/**
* Permission flag: The permission is set in its current state
* because the app is a component that is a part of the system.
*
* @hide
*/
@SystemApi
public static final int FLAG_PERMISSION_SYSTEM_FIXED = 1 << 4;
/**
* Permission flag: The permission is granted by default because it
* enables app functionality that is expected to work out-of-the-box
* for providing a smooth user experience. For example, the phone app
* is expected to have the phone permission.
*
* @hide
*/
@SystemApi
public static final int FLAG_PERMISSION_GRANTED_BY_DEFAULT = 1 << 5;
/**
* Permission flag: The permission has to be reviewed before any of
* the app components can run.
*
* @hide
*/
@SystemApi
public static final int FLAG_PERMISSION_REVIEW_REQUIRED = 1 << 6;
/**
* Mask for all permission flags.
*
* @hide
*/
@SystemApi
public static final int MASK_PERMISSION_FLAGS = 0xFF;
/**
* This is a library that contains components apps can invoke. For
* example, a services for apps to bind to, or standard chooser UI,
* etc. This library is versioned and backwards compatible. Clients
* should check its version via {@link android.ext.services.Version
* #getVersionCode()} and avoid calling APIs added in later versions.
*
* @hide
*/
public static final String SYSTEM_SHARED_LIBRARY_SERVICES = "android.ext.services";
/**
* This is a library that contains components apps can dynamically
* load. For example, new widgets, helper classes, etc. This library
* is versioned and backwards compatible. Clients should check its
* version via {@link android.ext.shared.Version#getVersionCode()}
* and avoid calling APIs added in later versions.
*
* @hide
*/
public static final String SYSTEM_SHARED_LIBRARY_SHARED = "android.ext.shared";
/**
* Used when starting a process for an Activity.
*
* @hide
*/
public static final int NOTIFY_PACKAGE_USE_ACTIVITY = 0;
/**
* Used when starting a process for a Service.
*
* @hide
*/
public static final int NOTIFY_PACKAGE_USE_SERVICE = 1;
/**
* Used when moving a Service to the foreground.
*
* @hide
*/
public static final int NOTIFY_PACKAGE_USE_FOREGROUND_SERVICE = 2;
/**
* Used when starting a process for a BroadcastReceiver.
*
* @hide
*/
public static final int NOTIFY_PACKAGE_USE_BROADCAST_RECEIVER = 3;
/**
* Used when starting a process for a ContentProvider.
*
* @hide
*/
public static final int NOTIFY_PACKAGE_USE_CONTENT_PROVIDER = 4;
/**
* Used when starting a process for a BroadcastReceiver.
*
* @hide
*/
public static final int NOTIFY_PACKAGE_USE_BACKUP = 5;
/**
* Used with Context.getClassLoader() across Android packages.
*
* @hide
*/
public static final int NOTIFY_PACKAGE_USE_CROSS_PACKAGE = 6;
/**
* Used when starting a package within a process for Instrumentation.
*
* @hide
*/
public static final int NOTIFY_PACKAGE_USE_INSTRUMENTATION = 7;
/**
* Total number of usage reasons.
*
* @hide
*/
public static final int NOTIFY_PACKAGE_USE_REASONS_COUNT = 8;
/**
* Constant for specifying the highest installed package version code.
*/
public static final int VERSION_CODE_HIGHEST = -1;
/** {@hide} */
public int getUserId() {
return UserHandle.myUserId();
}
/**
* Retrieve overall information about an application package that is
* installed on the system.
*
* @param packageName The full name (i.e. com.google.apps.contacts) of the
* desired package.
* @param flags Additional option flags to modify the data returned.
* @return A PackageInfo object containing information about the package. If
* flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the package
* is not found in the list of installed applications, the package
* information is retrieved from the list of uninstalled
* applications (which includes installed applications as well as
* applications with data directory i.e. applications which had been
* deleted with {@code DONT_DELETE_DATA} flag set).
* @throws NameNotFoundException if a package with the given name cannot be
* found on the system.
*/
public abstract PackageInfo getPackageInfo(String packageName, @PackageInfoFlags int flags)
throws NameNotFoundException;
/**
* Retrieve overall information about an application package that is
* installed on the system. This method can be used for retrieving
* information about packages for which multiple versions can be installed
* at the time. Currently only packages hosting static shared libraries can
* have multiple installed versions. The method can also be used to get info
* for a package that has a single version installed by passing
* {@link #VERSION_CODE_HIGHEST} in the {@link VersionedPackage}
* constructor.
*
* @param versionedPackage The versioned package for which to query.
* @param flags Additional option flags to modify the data returned.
* @return A PackageInfo object containing information about the package. If
* flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the package
* is not found in the list of installed applications, the package
* information is retrieved from the list of uninstalled
* applications (which includes installed applications as well as
* applications with data directory i.e. applications which had been
* deleted with {@code DONT_DELETE_DATA} flag set).
* @throws NameNotFoundException if a package with the given name cannot be
* found on the system.
*/
public abstract PackageInfo getPackageInfo(VersionedPackage versionedPackage,
@PackageInfoFlags int flags) throws NameNotFoundException;
/**
* Retrieve overall information about an application package that is
* installed on the system.
*
* @param packageName The full name (i.e. com.google.apps.contacts) of the
* desired package.
* @param flags Additional option flags to modify the data returned.
* @param userId The user id.
* @return A PackageInfo object containing information about the package. If
* flag {@code MATCH_UNINSTALLED_PACKAGES} is set and if the package