在安卓系统中是否有自动更新应用程序的方法?

37

我正在开发一款应用程序,很可能会预装在设备上,并且也可以在Google Play上下载。是否有一种方法可以更新那些没有通过Google Play下载的实例,因为Google Play不会通知用户进行更新。

我正在考虑像这里建议的那样,定期联系我的网站,当可用更新时,进行下载。

有没有一种自动化或者静默方式进行更新,从而用户无需做任何事情(例如手动运行包)。或者,当我的网站显示有可用更新时,通过Google Play向用户提供更新,即使它未通过Market安装(编辑:这个Google Play选项更可取,因为用户无需检查“允许安装非市场来源”)。


预装的,可能是通过与设备供应商或运营商合作而实现的。 - Christopher Orr
1
是的,很可能如此,但如果它是在企业环境或类似情况下,一个选择是通过从市场下载安装程序来安装,而不必自己创建更新程序。 - Cheryl Simon
1
有可能卖家会在他们的设备上预装它,但他们可能不会通过市场安装它,我希望让用户能够轻松升级而不会遇到太多麻烦... - Levara
10个回答

44

我曾经遇到过同样的问题,现在,在我的应用程序开始时,我会检查我的配置文件中是否有新版本。

我将实际版本与我的configuration.xml文件中的"< app_version >1.1< /app_version >"标签进行比较,如果实际版本低于它,我就会询问用户是否要升级,并使用自定义AlertDialog来提醒。

Intent intent = new Intent(Intent.ACTION_VIEW ,Uri.parse(myapk_link));
startActivity(intent);    
用户在下载完成后需要手动运行该软件包。若您选择通过 Android 市场进行更新,请使用以下方法:
Intent intent = new Intent(Intent.ACTION_VIEW ,Uri.parse("market://details?id=com.package.name"));
startActivity(intent);  

com.package.name 必须是你的应用程序的“包名”

或者

Intent intent = new Intent(Intent.ACTION_VIEW ,Uri.parse("market://search?q=" + APP_NAME));
startActivity(intent);  

这基本上是我心中的想法。对于用户来说仍然有些复杂……谢谢。 - Levara
7
你和GooglePlay版本相比怎么样?兄弟,感激不尽。 - Ahmad Arslan
1
我的做法是在互联网上获取最新版本,例如yourdomain.com/lastversion.txt。当应用程序启动时,它会执行一个HTTP GET请求到写有最新版本的URL,并与应用程序版本进行比较,如果远程版本更高,则启动意图。因此,在您的版本经过Google Play批准后,我会更新yourdomain.com/lastversion.txt内容,以包含新发布的版本。 - Jorge Arimany
使用以下方式:https://developer.android.com/guide/app-bundle/in-app-updates - Mohammad Imran

8

我找到了一种可行的方法。 发送一个Intent到应用市场,搜索我的应用程序。

使用OpenIntent Newsreader进行测试,因为它很容易找到旧版本的.apk。市场会找到一个应用程序,当用户点击安装时,用市场中的新版本替换旧版本。我认为这对用户来说比手动下载.apk并运行它要容易得多。

Intent intent = new Intent(Intent.ACTION_VIEW ,Uri.parse("market://search?q=" + APPLICATION_NAME));
startActivity(intent);  

2
如果设备上没有市场(例如Google应用程序)怎么办? - zed_0xff
我所有的用户都应该安装Market。如果不是这种情况,Jorgesys的答案可能是唯一的选择。 - Levara

7
有没有办法更新那些没有通过Google Play下载的实例,因为Google Play不会通知用户有关更新的信息。
旧问题,新答案:
在查找与此完全相同的问题(设备上预安装的应用程序,如何通过Google Play提供更新)时,我在support.google.com*上找到了这些信息:
Google Play可以管理预加载应用程序的更新,前提是满足以下条件:
- 预加载应用程序需要在系统分区中 - 预加载应用程序需要是免费的 - 预加载应用程序需要使用与在Google Play中发布的应用程序相同的签名 - 预加载和更新应用程序的包名称需要相同 - 更新应用程序的版本代码需要大于预加载应用程序的版本代码
*截至2015年4月13日

截至2013年10月10日,其中一个要求是“预装应用程序需要免费”。 - Stephen Hosking

4
我正在开发一个应用程序,很可能会预装在设备上。
那么你需要与设备制造商交流并向他们提出问题。没有其他人能够告诉你什么是可能的,什么是不可能的,这取决于他们的设备和分发它的运营商。答案将严重依赖于他们如何创建固件,你的应用程序是否将成为固件的一部分或作为普通应用程序“安装”,他们与运营商在固件更新方面的安排等等。你甚至可能无法参与决策。

3
你甚至可能没有就此事投票的权利。 我不...这就是为什么我正在寻找另一种方法...:P - Levara
也许你可以更新你的答案并指向你的cwac-updater。 - rds
@CommonsWar 我们能否从Google Play自动更新启动器应用程序?我遇到了问题 http://stackoverflow.com/questions/39504146/google-play-auto-update-does-not-update-apps#39504146 - PankajAndroid

2

1
这个答案是正确的,但这个解决方案只适用于Android 21 >=。https://developer.android.com/guide/app-bundle/in-app-updates - Mohammad Imran

1
如果在设备上捆绑应用程序的人做得恰当,那么该应用程序仍将拥有市场链接(即使作为系统应用程序),并且Market将提示用户升级到新版本(如果可用)。毕竟,这正是像GMail这样预装在手机上的应用程序所发生的事情。

0

有一个很好的服务可以帮助您的应用程序保持更新。请查看https://www.pushlink.com

在这个产品中,有一个NINJA模式,可以在没有用户交互的情况下执行更新。

对于其他“模式”,仍需要启用“安装非市场应用程序”。如果未启用,则安装过程将要求启用它并将用户重定向到应用程序设置,之后用户可以安装该应用程序。


你能给我一些关于Ninja模式的文档、博客或其他资料吗?这样我就可以更深入地了解它。谢谢。 - yahya
2
而且还是一项昂贵的服务!5000次安装每月需要1250美元,而且价格还在上涨。有点离谱,但如果你是一个愚蠢的企业,那就没问题了。目标可能是一个私人应用程序的小用户群。 - Andrew

0

您无法自动安装或升级软件包。只有Android市场才能做到这一点(即它会自动更新)。

您可以下载一个软件包并触发Intent来安装它,但用户必须启用“允许非市场应用程序”选项,并且他们仍然需要手动批准安装/升级。

可能要调查的一个地方是Google Maps如何实现的。它通常是预装的,但似乎总是显示为Android市场应用程序中的更新。我不知道是否在packages.xml或清单中有特殊标志。


0

如果您可以将应用程序签名为系统应用程序,则可以完全自动更新应用程序。我们为特定硬件编写了一个应用程序,我们创建了一个由制造商为我们签名的更新应用程序。更新应用程序在设备启动时运行,检查应用程序的当前版本和新版本,并在必要时安装新版本。

使用情况可能是一个嵌入式应用程序,在某个品牌和型号的平板电脑上运行,这些平板电脑没有Google Play。


-1

那篇文章没有链接到官方文档,这个回答也是如此。 - Phani Rithvij

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接