Androidアプリをサイレントインストール・アップデートする
主に業務アプリなどで使用される、ユーザーが難しい操作をすることなく、
Androidアプリを自動アップデートするための機能を実装する方法を解説します。
検証環境
- Android 11 AOSP
- DeviceOwner権限を付与済
サイレントインストールのサンプルコード
PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller();
PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL);
params.setAppPackageName(context.getPackageName());
PackageInstaller.Session session;
InputStream in;
OutputStream out;
try {
int sessionId = packageInstaller.createSession(params);
session = packageInstaller.openSession(sessionId);
File apkFile = new File(filePath);
in = Files.newInputStream(apkFile.toPath());
out = session.openWrite("INSTALL", 0, -1);
int total = 0;
byte[] buffer = new byte[65536];
int c;
while ((c = in.read(buffer)) != -1) {
total += c;
out.write(buffer, 0, c);
}
session.fsync(out);
if (out != null) {
out.close();
}
in.close();
session.close();
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, sessionId,
new Intent(context, MainActivity.class), PendingIntent.FLAG_MUTABLE);
session.commit(pendingIntent.getIntentSender());
}
catch (Exception e) {
Log.d(TAG, e.getMessage());
}
公式のリファレンスにも記載がありますが、アプリに以下のいずれかの権限がない場合は、
インストールの過程で、ユーザーによる操作が必要となる場合があります。
- the device owner
- the affiliated profile owner
参考)https://developer.android.com/reference/android/content/pm/PackageInstaller