2012-09-10 63 views
1

我需要开发一个带有自动更新过程的android应用程序。我阅读了一些帖子,并看到Intent.View从代码安装/更新应用程序。使用Intent.Up更新Android应用程序

它需要root访问权限才能安装或更新应用程序吗?

在此先感谢

回答

1

可以触发一个Intent将启动一个APK安装过程。它将启动正常的Android软件安装程序,这意味着用户将有机会接受或拒绝安装。您不需要根设备来执行此操作,但您也无法强制用户接受安装。我认为我们可以认同这将是安全模型中的一个非常糟糕的漏洞。

+0

谢谢......我测试了一下,操作视图显示了正常的Android软件安装程序,但它显示了使用Web浏览器的“完成操作”。存在任何形式以避免此操作,并只显示正常的Android安装程序? – jcesarms15

+0

如果您使用http URL拍摄'Intent',我不认为如果不明确地输入Android安装程序的软件包名称就可以避免这种情况。另一方面,如果您的自动更新程序下载新的APK,并触发指向本地文件的“Intent”,则它不应该提供Web浏览器作为选择。 – Argyle

0

如果没有root访问权限,您可以安装通过以下意图应用:

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
intent.setFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setDataAndType(Uri.fromFile(myFile)),"application/vnd.android.package-archive"); 
context.startActivity(intent); 

注意,然后用户将被提示替换现有的应用程序,他会提示实际安装应用程序。

如果做有root权限,您可以执行以下命令来安装应用程序:

pm install -r {myFile.getAbsolutePath()} 

你可以使用库RootTools(https://code.google.com/p/roottools/)通过以下方式来执行命令:

CommandCapture command = new CommandCapture(0, "pm install -r " + myFile.getAbsolutePath()); 
RootTools.getShell(true).add(command).waitForFinish(); 

请注意,应用程序在安装后未自动启动。也无法捕获Install-Intent(正在安装的应用程序将不会收到该事件)。您可以在安装后重新启动设备,然后捕获ON-Boot-Intent。