我们已经构建了一个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
答案 0 :(得分:1)
尝试使用它,我从某处回忆起setDataAndType需要在一行中完成。
Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(Uri.parse(filePath), "application/vnd.android.package-archive");
startActivity(promptInstall);