public class PackageInstaller
extends Object
java.lang.Object | |
↳ | android.content.pm.PackageInstaller |
提供在设备上安装,升级和删除应用程序的功能。 这包括支持将应用程序打包为单个“单一”APK或将应用程序打包为多个“分割”APK。
应用程序通过任何应用程序可以创建的PackageInstaller.Session
进行安装。 一旦创建会话,安装程序就可以将一个或多个APK放入到位,直到它决定提交或销毁会话。 提交可能需要用户干预才能完成安装。
会话可以安装全新的应用程序,升级现有的应用程序,或添加新的拆分到现有的应用程序。
打包为多个拆分APK的应用始终由单个“基本”APK( null
拆分名称)和零个或多个“拆分”APK(具有唯一拆分名称)组成。 只要满足以下约束,这些APK的任何子集都可以安装在一起:
Nested classes |
|
---|---|
class |
PackageInstaller.Session 正在积极安装的安装。 |
class |
PackageInstaller.SessionCallback 观察会话生命周期的事件。 |
class |
PackageInstaller.SessionInfo 活动安装会话的详细信息。 |
class |
PackageInstaller.SessionParams 用于创建新的参数 |
Constants |
|
---|---|
String |
ACTION_SESSION_DETAILS 活动操作:显示有关特定安装会话的详细信息。 |
String |
EXTRA_OTHER_PACKAGE_NAME 与状态相关的另一个软件包名称。 |
String |
EXTRA_PACKAGE_NAME 与操作一起使用的软件包名称。 |
String |
EXTRA_SESSION_ID 一个操作正在使用的整数会话ID。 |
String |
EXTRA_STATUS 操作的当前状态。 |
String |
EXTRA_STATUS_MESSAGE 状态的详细字符串表示,包括对调试有用的原始详细信息。 |
String |
EXTRA_STORAGE_PATH 与状态相关的存储路径。 |
int |
STATUS_FAILURE 该操作以通用方式失败。 |
int |
STATUS_FAILURE_ABORTED 操作失败,因为它被积极中止。 |
int |
STATUS_FAILURE_BLOCKED 该操作因为被阻止而失败。 |
int |
STATUS_FAILURE_CONFLICT 操作失败,因为它与设备上已安装的另一个软件包冲突(或不一致)。 |
int |
STATUS_FAILURE_INCOMPATIBLE 操作失败是因为它基本上与此设备不兼容。 |
int |
STATUS_FAILURE_INVALID 操作失败,因为一个或多个APK无效。 |
int |
STATUS_FAILURE_STORAGE 由于存储问题,操作失败。 |
int |
STATUS_PENDING_USER_ACTION 用户操作当前需要继续。 |
int |
STATUS_SUCCESS 操作成功。 |
Public methods |
|
---|---|
void |
abandonSession(int sessionId) 完全放弃给定的会话,销毁所有分阶段的数据并使其无效。 |
int |
createSession(PackageInstaller.SessionParams params) 使用给定的参数创建一个新的会话,返回一个代表会话的唯一ID。 |
List<PackageInstaller.SessionInfo> |
getAllSessions() 无论安装程序如何,都返回所有已知安装会话的列表。 |
List<PackageInstaller.SessionInfo> |
getMySessions() 返回调用应用程序拥有的所有已知安装会话的列表。 |
PackageInstaller.SessionInfo |
getSessionInfo(int sessionId) 返回特定会话的详细信息。 |
PackageInstaller.Session |
openSession(int sessionId) 打开一个现有的会话来主动执行工作。 |
void |
registerSessionCallback(PackageInstaller.SessionCallback callback, Handler handler) 注册以观看会话生命周期事件。 |
void |
registerSessionCallback(PackageInstaller.SessionCallback callback) 注册以观看会话生命周期事件。 |
void |
uninstall(String packageName, IntentSender statusReceiver) 卸载给定的软件包,将其从设备上彻底删除。 |
void |
unregisterSessionCallback(PackageInstaller.SessionCallback callback) 取消注册以前注册的回叫。 |
void |
updateSessionAppIcon(int sessionId, Bitmap appIcon) 更新代表在特定会话中安装的应用程序的图标。 |
void |
updateSessionAppLabel(int sessionId, CharSequence appLabel) 更新表示正在特定会话中安装的应用程序的标签。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
String ACTION_SESSION_DETAILS
活动操作:显示有关特定安装会话的详细信息。 这可能表现为诸如暂停,恢复或取消等操作。
这应该始终限于拥有会话的安装程序包。 客户应该使用createDetailsIntent()
正确地建立这个意图。
在某些情况下,匹配的活动可能不存在,因此请确保您采取防范措施。
显示详细信息的会话在 EXTRA_SESSION_ID
定义。
常量值:“android.content.pm.action.SESSION_DETAILS”
String EXTRA_OTHER_PACKAGE_NAME
与状态相关的另一个软件包名称。 这通常是导致操作失败的包。
也可以看看:
常量值:“android.content.pm.extra.OTHER_PACKAGE_NAME”
String EXTRA_PACKAGE_NAME
与操作一起使用的软件包名称。
也可以看看:
常量值:“android.content.pm.extra.PACKAGE_NAME”
String EXTRA_SESSION_ID
一个操作正在使用的整数会话ID。
也可以看看:
常量值:“android.content.pm.extra.SESSION_ID”
String EXTRA_STATUS
操作的当前状态。 将是一个STATUS_PENDING_USER_ACTION
, STATUS_SUCCESS
, STATUS_FAILURE
, STATUS_FAILURE_ABORTED
, STATUS_FAILURE_BLOCKED
, STATUS_FAILURE_CONFLICT
, STATUS_FAILURE_INCOMPATIBLE
, STATUS_FAILURE_INVALID
,或STATUS_FAILURE_STORAGE
。
有关状态的更多信息可以通过额外的附加功能获得; 详细信息请参阅个人状态文档。
也可以看看:
常量值:“android.content.pm.extra.STATUS”
String EXTRA_STATUS_MESSAGE
状态的详细字符串表示,包括对调试有用的原始详细信息。
也可以看看:
常量值:“android.content.pm.extra.STATUS_MESSAGE”
String EXTRA_STORAGE_PATH
与状态相关的存储路径。
也可以看看:
常量值:“android.content.pm.extra.STORAGE_PATH”
int STATUS_FAILURE
该操作以通用方式失败。 系统将一直试图提供更具体的失败原因,但在一些极少数情况下可能会交付。
也可以看看:
常数值:1(0x00000001)
int STATUS_FAILURE_ABORTED
操作失败,因为它被积极中止。 例如,用户主动拒绝请求的权限,或会话被放弃。
也可以看看:
常量值:3(0x00000003)
int STATUS_FAILURE_BLOCKED
该操作因为被阻止而失败。 例如,设备策略可能会阻止该操作,程序包验证程序可能已经阻止了该操作,或者该核心系统操作可能需要应用程序。
结果也可能包含 EXTRA_OTHER_PACKAGE_NAME
,而特定程序包会阻止安装。
常量值:2(0x00000002)
int STATUS_FAILURE_CONFLICT
操作失败,因为它与设备上已安装的另一个软件包冲突(或不一致)。 例如,现有权限,不兼容证书等。用户可能能够卸载另一个应用程序来解决问题。
结果也可能包含 EXTRA_OTHER_PACKAGE_NAME
,并将特定程序包标识为冲突的原因。
常量值:5(0x00000005)
int STATUS_FAILURE_INCOMPATIBLE
操作失败是因为它基本上与此设备不兼容。 例如,应用程序可能需要一个不存在的硬件功能,它可能缺少设备支持的ABI的本机代码,或者它需要更新的SDK版本等。
也可以看看:
常量值:7(0x00000007)
int STATUS_FAILURE_INVALID
操作失败,因为一个或多个APK无效。 例如,他们可能是畸形的,腐败的,不正确的签名,不匹配等。
也可以看看:
常量值:4(0x00000004)
int STATUS_FAILURE_STORAGE
由于存储问题,操作失败。 例如,设备可能空间不足,或者外部媒体可能不可用。 用户可能能够帮助释放空间或插入不同的外部媒体。
结果也可能包含 EXTRA_STORAGE_PATH
以及导致失败的存储设备的路径。
常数值:6(0x00000006)
int STATUS_PENDING_USER_ACTION
用户操作当前需要继续。 您可以启动EXTRA_INTENT
所描述的意图活动,让用户参与并继续。
如果用户正在主动使用您的应用,您可以选择立即启动该意图。 否则,您应该在启动之前使用通知来引导用户回到您的应用中。
也可以看看:
常量值:-1(0xffffffff)
void abandonSession (int sessionId)
完全放弃给定的会话,销毁所有分阶段的数据并使其无效。 被遗弃的会话将作为失败报告给PackageInstaller.SessionCallback
听众。 这相当于打开会话并致电abandon()
。
Parameters | |
---|---|
sessionId |
int
|
Throws | |
---|---|
SecurityException |
when the caller does not own the session, or the session is invalid. |
int createSession (PackageInstaller.SessionParams params)
使用给定的参数创建一个新的会话,返回一个代表会话的唯一ID。 一旦创建,会话可以在多个设备引导中多次打开。
系统可能会在合理的时间段内(通常为一天的时间)自动销毁尚未完成(承诺或放弃)的会话。
Parameters | |
---|---|
params |
PackageInstaller.SessionParams
|
Returns | |
---|---|
int |
positive, non-zero unique ID that represents the created session. This ID remains consistent across device reboots until the session is finalized. IDs are not reused during a given boot. |
Throws | |
---|---|
IOException |
if parameters were unsatisfiable, such as lack of disk space or unavailable media. |
SecurityException |
when installation services are unavailable, such as when called from a restricted user. |
IllegalArgumentException |
when PackageInstaller.SessionParams is invalid. |
List<PackageInstaller.SessionInfo> getAllSessions ()
无论安装程序如何,都返回所有已知安装会话的列表。
Returns | |
---|---|
List<PackageInstaller.SessionInfo> |
List<PackageInstaller.SessionInfo> getMySessions ()
返回调用应用程序拥有的所有已知安装会话的列表。
Returns | |
---|---|
List<PackageInstaller.SessionInfo> |
PackageInstaller.SessionInfo getSessionInfo (int sessionId)
返回特定会话的详细信息。 不需要特殊的权限来检索这些细节。
Parameters | |
---|---|
sessionId |
int
|
Returns | |
---|---|
PackageInstaller.SessionInfo |
details for the requested session, or null if the session does not exist. |
PackageInstaller.Session openSession (int sessionId)
打开一个现有的会话来主动执行工作。 要成功,调用者必须是安装会话的所有者。
Parameters | |
---|---|
sessionId |
int
|
Returns | |
---|---|
PackageInstaller.Session |
Throws | |
---|---|
IOException |
if parameters were unsatisfiable, such as lack of disk space or unavailable media. |
SecurityException |
when the caller does not own the session, or the session is invalid. |
void registerSessionCallback (PackageInstaller.SessionCallback callback, Handler handler)
注册以观看会话生命周期事件。 不需要特殊的权限来监视这些事件。
Parameters | |
---|---|
callback |
PackageInstaller.SessionCallback
|
handler |
Handler : to dispatch callback events through, otherwise uses calling thread. |
void registerSessionCallback (PackageInstaller.SessionCallback callback)
注册以观看会话生命周期事件。 不需要特殊的权限来监视这些事件。
Parameters | |
---|---|
callback |
PackageInstaller.SessionCallback
|
void uninstall (String packageName, IntentSender statusReceiver)
卸载给定的软件包,将其从设备上彻底删除。 此方法仅适用于包的当前“记录安装程序”。
Parameters | |
---|---|
packageName |
String
|
statusReceiver |
IntentSender
|
void unregisterSessionCallback (PackageInstaller.SessionCallback callback)
取消注册以前注册的回叫。
Parameters | |
---|---|
callback |
PackageInstaller.SessionCallback
|
void updateSessionAppIcon (int sessionId, Bitmap appIcon)
更新代表在特定会话中安装的应用程序的图标。 这两个维度应该大致为getLauncherLargeIconSize()
。
Parameters | |
---|---|
sessionId |
int
|
appIcon |
Bitmap
|
Throws | |
---|---|
SecurityException |
when the caller does not own the session, or the session is invalid. |
void updateSessionAppLabel (int sessionId, CharSequence appLabel)
更新表示正在特定会话中安装的应用程序的标签。
Parameters | |
---|---|
sessionId |
int
|
appLabel |
CharSequence
|
Throws | |
---|---|
SecurityException |
when the caller does not own the session, or the session is invalid. |