0

我有这段代码

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 的替代方案”,但我仍然无法弄清楚。我还放了代码,以便可能在那里完成一些事情。

在此先感谢...欢迎提出任何建议。

4

2 回答 2

0

您可以收听 PACKAGE_ADDED 广播意图:http: //developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_ADDED

据我所知,这些是在安装完成后发送的,您可以从服务中收听。

请注意,如果应用程序已经安装,您将获得 ACTION_PACKAGE_CHANGED(据我所知)。

此外,您还必须知道包名称,而不仅仅是 apk 名称,因为意图将包含包名称。

于 2011-10-20T11:01:37.583 回答
0

@Pal Szasz 给出的答案在技术上是正确的(据我所知;-))。

但是,根据您问题中提供的信息,我假设您只希望显示通知(无需执行进一步的编程操作)。如果我的假设是正确的,我会恭敬地建议您不要显示这样的通知。这就是为什么:

Android 系统已经有了向用户传递通知的标准方法。在这种情况下,状态栏将向您显示一条消息,说明新应用程序已成功安装(或在出现错误时未安装)。如果您实施另一个通知渠道,您很可能会因偏离标准的预期行为而混淆或激怒您的用户。

超越理智的界限,人们也可能会争论这样一个事实,即你在某种意义上也会导致 Android 的碎片化(虽然规模很小,但仍然如此)。

于 2011-10-21T07:30:22.557 回答