0

从下载管理器我可以下载更新的 APK。成功下载安装后弹出安装或取消。有什么方法可以在不要求安装的情况下安装 APK。因为如果我点击弹出窗口的外侧,弹出窗口就会关闭。

 Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(new File(path)),
                "application/vnd.android.package-archive");

        intent.setAction(Intent.ACTION_INSTALL_PACKAGE);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); 
4

5 回答 5

3

下面的方法在 data/local 上查找预定义的标记,并尝试安装/system/preinstall目录中的 apk 文件(您可以更改)。

在您的使用中删除apks_installed touch。在下次启动时,android 将在 preinstall 目录中安装 apks

添加在启动 (init.d) 脚本时运行的服务

service blabla /system/bin/blabla.sh
user root
group root
disabled
oneshot

写一个blabla.sh文件,放到/system/bin/目录下

#!/system/bin/sh

MARK=/data/local/apks_installed
PKGS=/system/preinstall/

if [ ! -e $MARK ]; then

busybox find $PKGS -name "*\.apk" -exec sh /system/bin/pm install {} \;

touch $MARK
fi

注意:您可能意识到您还需要安装busybox

我可能会犯一些错误,但我想你明白这一点

于 2015-04-23T13:56:24.943 回答
1

通常,您需要设备被植根或具有系统固件签名。

您可以在您的应用程序ApplicationManager中创建一个副本。OnInstalledPackaged

使用它你可以运行类似这样的东西:

public static void installApp(Context context, File path, OnInstalledPackaged callback) {
    try {
        final ApplicationManager am = new ApplicationManager(context);
        if(callback != null) am.setOnInstalledPackaged(callback);
        am.installPackage(path);
    } catch (Exception e) {
        if(Utils.LOGGING) Utils.log("E::"+e.toString());
    }
}
于 2015-04-23T13:39:59.997 回答
1

是的,您可以通过使您的应用程序系统应用程序然后运行命令pm install来静默安装 apk,如下所示:

**private boolean installApk(String apkPath) 
{
  Command installEvent = new Command(getCommandList("pm install "
        + apkPath));
  return installEvent.executeCommandList();      
}**

它对我有用。

于 2016-05-03T11:38:57.323 回答
0

您无法在没有用户交互的情况下安装 apk,因为您的应用程序不是系统级别的

但是在三星设备中,如果您从三星获得企业许可证,您可以静默安装和卸载应用程序

于 2015-04-23T13:53:24.803 回答
0

不,出于安全原因,这是不可能的。您可以启动安装,但由用户决定。

但是,如果手机已植根,则可以通过编程方式执行此操作,但这不是大多数应用程序的选项。代码与此类似:

public ApplicationManager(Context context) throws SecurityException, NoSuchMethodException {

    observer = new PackageInstallObserver();
    pm = context.getPackageManager();

    Class<?>[] types = new Class[] {Uri.class, IPackageInstallObserver.class, int.class, String.class};
    Class<?>[] uninstalltypes = new Class[] {String.class, IPackageInstallObserver.class, int.class};
    method = pm.getClass().getMethod("installPackage", types);
    uninstallmethod = pm.getClass().getMethod("deletePackage", uninstalltypes);
}


public void uninstallPackage(String packagename) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
        uninstallmethod.invoke(pm, new Object[] {packagename, observer, 0});
}
public void installPackage(Uri apkFile) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
        method.invoke(pm, new Object[] {apkFile, observer, INSTALL_REPLACE_EXISTING, null});
}

更多细节在这里:

以编程方式安装/卸载 APK(PackageManager 与 Intents)

https://paulonaka.wordpress.com/2011/07/02/how-to-install-a-application-in-background-on-android/

于 2015-04-23T13:35:03.287 回答