从服务中通知安装完成

时间:2011-10-20 10:08:11

标签: android service installation status notify

我有这段代码

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”,但我仍然无法解决这个问题。 我也把代码放在那里,也许那里可能会有一些东西。

提前致谢...欢迎任何建议。

2 个答案:

答案 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的碎片化(在很小的范围内,但仍然如此)。