修改记录
1.安装器
//Installer.java
package com.kte.interfacesettings.service;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.content.pm.IPackageInstallerCallback;
import java.io.File;
import android.os.RemoteException;
import java.io.FileInputStream;
import java.io.OutputStream;
import android.app.PendingIntent;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageInstaller.SessionInfo;
import android.content.pm.PackageParser;
import android.content.pm.IPackageInstaller;
import android.os.ServiceManager;
import com.android.internal.content.PackageHelper;
import android.os.UserHandle;
import android.app.ActivityManager;
import android.os.Binder;
import android.content.pm.IPackageManager;
public class Installer {
private static String TAG = “install”;
private Installer() {
}
public static void silentInstallApk(Context context, String apkFilePath, int userId, boolean openWhenInstalled) {
Log.d(TAG, "[Installer] silentInstallApk...path=" + apkFilePath);
File apkFile = new File(apkFilePath);
IPackageManager mPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
try {
final IPackageInstaller packageInstaller = mPm.getPackageInstaller();
packageInstaller.registerCallback(new IPackageInstallerCallback.Stub() {
String pkgname = null;
@Override
public void onSessionProgressChanged(int sessionId, float progress) throws RemoteException {
Log.d(TAG, "[Installer] silentInstallApk...onProgressChanged-> " + sessionId);
}
@Override
public void onSessionFinished(int sessionId, boolean success) throws RemoteException {
Log.d(TAG, "[Installer] silentInstallApk...Silent Install session " + sessionId + " Success=" + success + ",,pkgName=" + pkgname);
if (success && openWhenInstalled) {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(pkgname);
context.startActivity(intent);
}
}
@Override
public void onSessionCreated(int sessionId) throws RemoteException {
SessionInfo sessionInfo = packageInstaller.getSessionInfo(sessionId);
pkgname = sessionInfo.getAppPackageName();
Log.d(TAG, "[Installer] silentInstallApk...Install Start sessionId-> " + sessionId + ",,pkgname=" +