Могу ли я обновить приложение для Android с помощью кнопки обновления?
Мы создали приложение для Android. Это нерыночное приложение, развернутое для множества клиентов. Используя MobiControl, мы отправляем новые обновления для нашего приложения. Обновление происходит тихо.
Во время обновления, если приложение используется и пользователь вводит какие-либо данные, приложение закрывается без ожидания подтверждения от пользователя!!, пользователь обновляется до более новой версии приложения и перезапускает ее. Из-за этого пользователь теряет свои изменения!! Кроме того, поскольку наше приложение имеет дело с конфиденциальной информацией, мы никогда не сможем записать ее на физическое хранилище устройства. Следовательно, "сохранить и восстановить" не вариант.
Я подумал, что одна из них может заключаться в том, чтобы предоставить кнопку "Обновить" на одном экране моего приложения (скажем, в настройках), откуда я мог бы обновить его до более новой версии. Для этого я получил следующий код, с помощью которого я могу показать намерение установки после передачи APK в качестве параметра.
Intent promptInstall = new Intent(Intent.ACTION_VIEW)
.setData(Uri.parse("file:///path/to/myapp.apk"))
.setType("application/vnd.android.package-archive");
startActivity(promptInstall);
Но когда приведенный выше код выполняется, я сталкиваюсь со следующей ошибкой.
06-21 18:29:01.666: E/AndroidRuntime(8981): Caused by: android.content.ActivityNotFoundException:
No Activity found to handle Intent { act=android.intent.action.VIEW typ=application/vnd.android.package-archive }
Это сработало вчера, когда я вызвал setDataAndType в одну строку. Но сегодня с тем же кодом я снова столкнулся с той же проблемой...
06-25 10:27:39.383: E/AndroidRuntime(3737): Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=/mnt/sdcard/test/ReinstallSample.apk typ=application/vnd.android.package-archive }
06-25 10:27:39.383: E/AndroidRuntime(3737): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1622)
06-25 10:27:39.383: E/AndroidRuntime(3737): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1417)
06-25 10:27:39.383: E/AndroidRuntime(3737): at android.app.Activity.startActivityForResult(Activity.java:3370)
06-25 10:27:39.383: E/AndroidRuntime(3737): at android.app.Activity.startActivityForResult(Activity.java:3331)
06-25 10:27:39.383: E/AndroidRuntime(3737): at android.app.Activity.startActivity(Activity.java:3566)
06-25 10:27:39.383: E/AndroidRuntime(3737): at android.app.Activity.startActivity(Activity.java:3534)
06-25 10:27:39.383: E/AndroidRuntime(3737): at com.example.reinstallsample.MainActivity.launchInstaller(MainActivity.java:73)
06-25 10:27:39.383: E/AndroidRuntime(3737): at com.example.reinstallsample.MainActivity.reInstall(MainActivity.java:66)
06-25 10:27:39.383: E/AndroidRuntime(3737): ... 14 more
1 ответ
Попробуйте использовать это вместо этого, я откуда-то вспоминаю, что setDataAndType нужно делать в одну строку.
Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(Uri.parse(filePath), "application/vnd.android.package-archive");
startActivity(promptInstall);