如何在不允许从未知来源安装的情况下将更新推送到预安装的应用程序

时间:2012-09-04 12:54:48

标签: android rom

我有一堆Android设备,可以使用自定义ROM进行闪存并发送给客户端。作为该ROM的一部分,将是一个“支持”应用程序,它与设备相关联。它无法发布到Google Play。我需要能够为用户提供下载和安装软件更新版本的机会。我已经检查,下载和安装已经实现的代码,但是它依赖于被配置的设备来启用来自未知来源的应用程序的安装。我需要该设备能够下载并安装这个特定的apk,同时仍然不允许安装来自未知来源的任何其他应用程序。

这可能吗?

(编辑:澄清所选答案最终如何运作)

添加到活动中的代码是:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() +"/update.apk")), "application/vnd.android.package-archive");
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
intent.putExtra(Intent.EXTRA_ALLOW_REPLACE, true);

startActivityForResult(intent, 0);

在android清单中,添加了以下代码:

<uses-permission android:name="android.permission.INSTALL_PACKAGES" />

安装应用程序后,我使用根文件资源管理器将apk从/user/apps移动到/system/apps,然后在重置手机后,应用程序可以自行安装,无需安装系统会提示用户启用不受信任的来源。安装提示,列出了应用所需的权限,并允许用户选择安装或不显示,但这很好。

1 个答案:

答案 0 :(得分:2)

此方法仅适用于系统应用(source

尝试通过添加和额外字段来安装apk。

intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);

从未尝试过这个。 doc表示您需要调用startActivityforResult才能使其正常工作。但这需要API级别14.也可以尝试

intent.putExtra(Intent.EXTRA_ALLOW_REPLACE, true);

编辑: 再想一想,如果你有自定义ROM,那么将shareduserid系统添加到你的安装程序应用程序并直接调用 无论PackageInstallerActivity调用什么来安装应用程序

Edit2:

检查code。 OnClick用于安装应用,因此将整个代码复制到您的应用并添加

<uses-permission android:name="android.permission.INSTALL_PACKAGES" />

权限。

到App的Android.mk添加

 LOCAL_CERTIFICATE := platform