2013-03-24 168 views
2

从运行的Android应用程序中,我想请求这个相同的应用程序(1)从我的专用Web服务器重新下载,(2)重新安装自身,然后(3)在重新安装后自行重新启动。重新安装运行Android应用程序自己的APK,然后重新启动应用程序?

我知道如何执行步骤1和2,但我还没有想出如何执行步骤3

下载后,我做第2步所示(这里this.apkpath有以前被设置为下载的APK的完整路径在我的SD卡):

try { 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(new File(this.apkpath)), 
         "application/vnd.android.package-archive"); 
    this.activity.startActivity(intent); 
} 
catch (Throwable t) { 
    // handle exceptions 
} 

此代码后成功,安装确认对话框弹出我的屏幕上,并重新安装发生在此确认。但是,安装后,控制权返回到我的桌面管理器,我必须手动重新启动我的新重新安装的应用程序。

我可以通过编程来强制应用程序在重新安装后自动重新启动?

回答

0

幸运的是,在Android 3.1及更高版本上这是不可能的; you cannot simply start an application on installation。具体来说,马克墨菲详细说明:

应用程序必须首先由用户通过某种活动调用。或者,您需要通过清单获取相关广播Intent,以便您可以在发生其中一个事件时获得控制权并以此方式启动您的服务。或者,您将需要让用户重新启动,以便您的过滤器可以得到控制。

换句话说,您可以挂钩到BOOT_COMPLETED,然后让您的应用程序启动,但这显然需要重新启动。

我会建议回到绘图板并重新考虑你想在这里完成什么。如果你真的采取这种具体的做法,有this crummy workaround,但我敦促你不要走这条路。

另一种方法可能是通过AlarmManager安排事件。我不确定重新安装应用程序时是否删除了事件。

(我写的“幸运”,因为这种行为是邀请来自恶意软件的恶意使用,也不会与用户的意图一致。)

+0

谢谢,保罗,但我想出了如何做到这一点。请参阅上面添加的“addFlags”行。它会导致在安装对话框后弹出一个打开的对话框。此时,我选择“打开”,我的应用程序重新启动。这足以满足我的需求。 – NYCHippo 2013-03-24 16:22:35

+0

很高兴听到它!您应该将更改转换为单独的答案,并将其标记为已回答,以便其他具有相同问题的人员可以查看问题以及解决方法。 – 2013-03-24 16:41:36

+0

是的,当这里的软件允许我回答我自己的问题时,我会在5-6小时内移动更改。 – NYCHippo 2013-03-24 18:10:46

6

我想出如何重新启动后重新安装应用程序。在情况下,它可以帮助其他人,这里是我做到了(注意添加“addFlags”方法之前startActivity调用):

try { 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(new File(this.apkpath)), 
         "application/vnd.android.package-archive"); 
    // Add this line ... 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    this.activity.startActivity(intent); 
} 
catch (Throwable t) { 
    // handle exceptions 
} 

当我运行此,我安装对话框后,得到一个打开请求对话框。然后我可以点击“打开”,该应用程序将确实重新启动。这足以满足我的需求。

+0

非常好!我已经用ICS进行了测试,它可以工作。它是否与果冻豆或奇巧一起使用? – CelinHC 2013-11-05 14:13:30

相关问题