- 如代码所示:
PackageInstallObserver observer = new PackageInstallObserver();
pm.installPackage(uri, observer, installFlags, null);
调用系统函数 installPackage 进行apk安装的时候,
第二个参数会传入一个观察者实例:observer,
PackageInstallObserver 的声明和实现的代码:
class PackageInstallObserver extends IPackageInstallObserver.Stub
{
@Override
public void packageInstalled(String packagename, int returnCode) {
。。。。。。
}
}
当安装结束时,就会回调这个观察者 observer 的回调函数:
packageInstalled,其中参数 returnCode 表示着不同的安装结果。
这些不同的结果标识,定义在:
/frameworks/base/core/java/android/content/pm/PackageManager.java
例如:
/**
* Installation return code: this is passed to the
* {@link IPackageInstallObserver} on success.
*
* @hide
*/
@SystemApi
public static final int INSTALL_SUCCEEDED = 1;
/**
* Installation return code: this is passed to the
* {@link IPackageInstallObserver} if the package is already installed.
*
* @hide
*/
@SystemApi
public static final int INSTALL_FAILED_ALREADY_EXISTS = -1;
......
/**
* Installation parse return code: this is passed to the
* {@link IPackageInstallObserver} if the parser did not find any
* certificates in the .apk.
*
* @hide
*/
@SystemApi
public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103;
更详细的解释可以参考:
packageInstalled函数的参数 returnCode 的源码解读
在返回 结果标识的同时,PackageManager.java 还提供了解析结果标识的函数:
调用:
PackageManager pm = mContext.getPackageManager();
pm.installStatusToString(returnCode);
installStatusToString 函数定义在:
/frameworks/base/core/java/android/content/pm/PackageManager.java
public static String installStatusToString(int status, String msg) {
final String str = installStatusToString(status);
if (msg != null) {
return str + ": " + msg;
} else {
return str;
}
}
public static String installStatusToString(int status) {
switch (status) {
case INSTALL_SUCCEEDED: return "INSTALL_SUCCEEDED";
case INSTALL_FAILED_ALREADY_EXISTS: return "INSTALL_FAILED_ALREADY_EXISTS";
......
网友评论