Я использую следующий код для установки apks:
final int sessionId = packageInstaller.createSession(params);
PackageInstaller.Session session = packageInstaller.openSession(sessionId);
OutputStream out = session.openWrite("COSU", 0, -1);
FileInputStream in = new FileInputStream(apkPath);
byte[] buffer = new byte[4*1024];
int c;
while ((c = in.read(buffer)) != -1) {
out.write(buffer, 0, c);
}
session.fsync(out);
in.close();
out.close();
packageInstaller.registerSessionCallback(new PackageInstaller.SessionCallback() {
@Override
public void onCreated(int sessionid) {
Log.i(TAG, "onCreated: installer created");
}
// ... other handlers
@Override
public void onFinished(int sessionid, boolean success) {
if(sessionid != sessionId)
return;
if(success)
{
Log.i(TAG, "onFinished: installation successfull");
}
else
{
Log.i(TAG, "onFinished: installation failed");
}
}
});
session.commit(PendingIntent.getBroadcast( common.appContext, sessionId,
new Intent("android.intent.action.MAIN"), 0).getIntentSender());
Это работает, как я ожидал. Тем не менее, я хочу получить причину, почему он потерпел неудачу, когда это произошло.
Параметр 'success' в обработчике onFinished является просто логическим значением и мало что говорит. Читая документацию , я понимаю, что для этого можно использовать коды состояния (например, STATUS_FAILURE_STORAGE, STATUS_FAILURE_INCOMPATIBLE ...), но я не смог найти документацию или пример, показывающий, как получить код состояниякогда происходит сбой.
Примечание. Это работает без пользовательского интерфейса, поэтому я не могу использовать примеры с использованием видимых действий.