下面列出了android.content.pm.PackageInstaller#openSession() 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private void actionInstallPackageQ(Uri uri) throws IOException {
PackageInstaller pi = getPackageManager().getPackageInstaller();
PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
int sessionId = pi.createSession(params);
// Show the progress dialog first
pi.registerSessionCallback(new InstallationProgressListener(this, pi, sessionId));
PackageInstaller.Session session = pi.openSession(sessionId);
doInstallPackageQ(uri, session, () -> {
// We have finished piping the streams, show the progress as 10%
session.setStagingProgress(0.1f);
// Commit the session
Intent intent = new Intent(this, DummyActivity.class);
intent.setAction(PACKAGEINSTALLER_CALLBACK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
session.commit(pendingIntent.getIntentSender());
});
}
@Override
protected void install(App app) {
registerReceiver();
PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
PackageInstaller.SessionParams sessionParams = new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL);
sessionParams.setAppPackageName(app.getPackageName());
sessionParams.setAppLabel(app.getDisplayName());
PackageInstaller.Session session = null;
try {
int sessionId = packageInstaller.createSession(sessionParams);
session = packageInstaller.openSession(sessionId);
for (File file: Paths.getApkAndSplits(context, app.getPackageName(), app.getVersionCode())) {
writeFileToSession(file, session);
}
session.commit(getIntentSender(sessionId));
} catch (IOException e) {
fail(e, app.getPackageName());
} finally {
com.github.yeriomin.yalpstore.Util.closeSilently(session);
}
}
private static boolean installPackage(Context context, InputStream in, String packageName)
throws IOException {
final PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
final PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
params.setAppPackageName(packageName);
final int sessionId = packageInstaller.createSession(params);
final PackageInstaller.Session session = packageInstaller.openSession(sessionId);
final OutputStream out = session.openWrite("COSU", 0, -1);
final byte[] buffer = new byte[65536];
int bytes_read;
while ((bytes_read = in.read(buffer)) != -1) {
out.write(buffer, 0, bytes_read);
}
session.fsync(out);
in.close();
out.close();
session.commit(createIntentSender(context, sessionId));
return true;
}
private static boolean installPackage(Context context, byte[] buffer, String packageName)
throws IOException {
final PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
final PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
params.setAppPackageName(packageName);
final int sessionId = packageInstaller.createSession(params);
final PackageInstaller.Session session = packageInstaller.openSession(sessionId);
final OutputStream out = session.openWrite("COSU", 0, -1);
out.write(buffer, 0, buffer.length);
session.fsync(out);
out.close();
session.commit(createIntentSender(context, sessionId));
return true;
}
private static boolean installPackage(Context context, InputStream in, String packageName)
throws IOException {
final PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
final PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
params.setAppPackageName(packageName);
final int sessionId = packageInstaller.createSession(params);
final PackageInstaller.Session session = packageInstaller.openSession(sessionId);
final OutputStream out = session.openWrite("COSU", 0, -1);
final byte[] buffer = new byte[65536];
int bytes_read;
while ((bytes_read = in.read(buffer)) != -1) {
out.write(buffer, 0, bytes_read);
}
session.fsync(out);
in.close();
out.close();
session.commit(createIntentSender(context, sessionId));
return true;
}
private static boolean installPackage(Context context, byte[] buffer, String packageName)
throws IOException {
final PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
final PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
params.setAppPackageName(packageName);
final int sessionId = packageInstaller.createSession(params);
final PackageInstaller.Session session = packageInstaller.openSession(sessionId);
final OutputStream out = session.openWrite("COSU", 0, -1);
out.write(buffer, 0, buffer.length);
session.fsync(out);
out.close();
session.commit(createIntentSender(context, sessionId));
return true;
}
public static boolean installPackage(Context context, InputStream in, String packageName)
throws IOException {
final PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
final PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
params.setAppPackageName(packageName);
// set params
final int sessionId = packageInstaller.createSession(params);
final PackageInstaller.Session session = packageInstaller.openSession(sessionId);
final OutputStream out = session.openWrite("TestDPC", 0, -1);
final byte[] buffer = new byte[65536];
int c;
while ((c = in.read(buffer)) != -1) {
out.write(buffer, 0, c);
}
session.fsync(out);
in.close();
out.close();
session.commit(createInstallIntentSender(context, sessionId));
return true;
}
@TargetApi(21)
private PackageInstaller.Session initSession() throws IOException {
PackageInstaller.Session session = null;
PackageInstaller packageInstaller = getPackageManager().getPackageInstaller();
PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
int sessionId = 0;
sessionId = packageInstaller.createSession(params);
session = packageInstaller.openSession(sessionId);
return session;
}