如何自动安装APK包

时间:2015-04-23 13:31:51

标签: android android-intent rooted-device

从下载管理器我可以下载更新的APK。成功下载安装POP UP即将进行安装或取消。 有没有办法安装APK而不要求安装。 因为如果我点击POPUP外面,POPUP就会消失。

 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); 

5 个答案:

答案 0 :(得分:2)

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

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

添加一个在start(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

我可能犯了一些错误,但我认为你理解这一点

答案 1 :(得分:1)

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

您可以在应用中创建ApplicationManagerOnInstalledPackaged的副本。

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

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());
    }
}

答案 2 :(得分:1)

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

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

它对我有用。

答案 3 :(得分:0)

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

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

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});
}

此处有更多详情:

install / uninstall APKs programmatically (PackageManager vs Intents)

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

答案 4 :(得分:0)

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

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