我有这段代码
private void initiateInstallation() {
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(new File("/sdcard/example.apk"));
intent.setDataAndType(uri, "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
从我的服务中安装名为example.apk的应用程序
我希望在安装完成后运行一个活动,通知用户有关安装的信息。除了活动在安装完成之前出现之外,我做了。 问题是在服务中我不能使用startActivityForResult。因此,我需要一种解决方法,以便我可以在安装完成后开始我的通知活动(或者为了示例,只是在服务中使用Toast打印出来)。 我已经尝试过其他问题的一些答案,比如“替代服务中的startActivityforResult”,但我仍然无法解决这个问题。 我也把代码放在那里,也许那里可能会有一些东西。
提前致谢...欢迎任何建议。
答案 0 :(得分:0)
您可以收听PACKAGE_ADDED广播意图:http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_ADDED
据我所知,这些是在安装完成后发送的,您可以收听服务中的内容。
请注意,如果已安装该应用程序,您将获得ACTION_PACKAGE_CHANGED(据我所知)。
此外,您还必须知道包名称,而不仅仅是apk名称,因为意图将包含包名称。
答案 1 :(得分:0)
@Pal Szasz给出的答案在技术上是正确的(据我所知;-))。
但是,根据您问题中提供的信息,我假设您只希望显示通知(不再以编程方式执行操作)。如果我的假设是正确的,我会恭敬地建议你不来显示这样的通知。这就是原因:
Android系统已经有一种向用户传递通知的标准方法。在这种情况下,状态栏已经显示一条消息,说明新应用程序已成功安装(或在发生错误时未安装)。如果您实施另一个通知渠道,您很可能会因偏离标准的预期行为而混淆或激怒您的用户。
将这一点超越理智的界限,人们也可以争辩说,在某种意义上,你也会导致Android的碎片化(在很小的范围内,但仍然如此)。