2012-09-04 20 views
2

我有一堆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,然后重置手机后应用程序能够自行安装,而不会提示用户启用不受信任的来源。安装提示列出了应用程序所需的权限,并提供用户选择安装还是不显示,但这很好。

回答

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呼吁安装该应用

编辑2:

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

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

权限。

而对于应用程序的Android.mk添加

LOCAL_CERTIFICATE := platform 
+0

您好。我已经尝试添加额外的字段,他们仍然没有重写安全性。你能告诉我更多关于shareduserid方法吗? – LairdPleng

+0

检查编辑。 – nandeesh

+0

嗨,感谢您的回复,但如果您检查该代码中的注释,它不会覆盖启用未知来源的需要,它只会提示它们更改设置 – LairdPleng

相关问题