Способ обновления моего apk в настоящее время заключается в установке нового apk поверх старого (без перезаписи локальной базы данных или настроек).
Так как Android 10 (API 29) ACTION_VIEW
устарел, так что это больше не работает:
Intent intent = new Intent(Intent.ACTION_VIEW);
//output file is the apk downloaded earlier
intent.setDataAndType(Uri.fromFile(outputFile), "application/vnd.android.package-archive");
startActivity(intent);
Следуя различным ответам, которые я нашел по inte rnet Мне нужно вместо этого начать использовать PackageInstaller. Глядя на демонстрацию, найденную в Android документах, я получаю следующее:
Intent intent = new Intent(PSMentorActivity.this,InstallApkSessionApi.class);
intent.putExtra("apkFile",outputFile);
this.startActivity(intent);
Где InstallApkSessionApi содержит кнопку, которая при нажатии должна запустить окно установки:
PackageInstaller packageInstaller = getPackageManager().getPackageInstaller();
PackageInstaller.SessionParams params = new
PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL);
int sessionId = packageInstaller.createSession(params);
session = packageInstaller.openSession(sessionId);
addApkToInstallSession(file, session);
// Create an install status receiver.
Context context = InstallApkSessionApi.this;
Intent intent = new Intent(context, InstallApkSessionApi.class);
intent.setAction(PACKAGE_INSTALLED_ACTION);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
IntentSender statusReceiver = pendingIntent.getIntentSender();
// Commit the session (this will start the installation workflow).
session.commit(statusReceiver);
Достаточно просто Хотя и сложнее по сравнению с прошлым. Ответ, который я получаю в onNewIntent, всегда:
case PackageInstaller.STATUS_FAILURE:
Toast.makeText(this, "Install failed!10 " + status + ", " + message,
Toast.LENGTH_SHORT).show();
break;
, где статус и сообщение принимают следующие значения: status=1, message= "INSTALL_FAILED_INTERNAL_ERROR: Permission denied"
.
Поэтому я предположил, что это проблема с разрешениями. У меня уже были разрешения на чтение и запись в хранилище. Другие связанные разрешения: INSTALL_PACKAGES
и REQUEST_INSTALL_PACKAGES
, которые я не могу использовать из-за того, что первое не предназначено для использования третьими лицами, а последнее - уровень подписи.
Есть что-то, чего мне ужасно не хватает, или есть я не могу обновить мой Apk, не заходя в Google Play?