我有一堆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
,然后在重置手机后,应用程序可以自行安装,无需安装系统会提示用户启用不受信任的来源。安装提示,列出了应用所需的权限,并允许用户选择安装或不显示,但这很好。
答案 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