像Google Play一样无声地安装Android应用程序

Nir*_*ngi -3 android android-install-apk device-admin

我需要安装apk文件而不需要Google PlayStore之类的任何用户提示.我知道这个问题已被多次询问,但我仍未找到任何可解答的答案.我只是从我的SD卡安装应用程序,我尝试了以下方式,

public void getInstall(Context context) {


        File file = new File(Environment.getExternalStorageDirectory()
                + "/Demo.apk");
        Uri mPackageURI = Uri.fromFile(file);

        ApplicationManager appMgr = null;

        try {
            appMgr = new ApplicationManager(context);
        } catch (SecurityException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (NoSuchMethodException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        int installFlags = 1;
        PackageManager pm = context.getPackageManager();

        Method method = null;

        try {
            method = pm.getClass().getMethod(
                    "installPackage",
                    new Class[] { android.net.Uri.class,
                            android.content.pm.IPackageInstallObserver.class,
                            Integer.TYPE, String.class });
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        String installerPackageName = "com.myapp.demo";
        PackageInstallObserver observer = appMgr.new PackageInstallObserver();

        try {

            method.invoke(pm, new Object[] { mPackageURI, observer,
                    installFlags, installerPackageName });

        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Neither user 10057 nor current process has android.permission.INSTALL_PACKAGES即使我在清单文件中添加了此权限,我也会收到错误.

我的设备没有root,我希望它没有生根,在许多答案中我发现根据安全原因他们不允许这是不可能的,但如果可以使用PlayStore和AndroidLost应用程序那么为什么不与我们一起?

如果可能的话,我需要帮助!

谢谢,

Rag*_*ood 7

我的设备没有root,我希望它没有root权限

这在Android上不适用于第三方应用.Google Play能够执行此操作,因为它是安装/system/app而不是/data/app.如果您可以说服任何OEM或ROM制造商将您的应用程序放在系统分区上,则可以使用该INSTALL_PACKAGES权限,因为该权限仅授予系统应用程序.

无论如何,这是一个Android反模式.如果您被允许在未经用户同意的情况下随意安装应用程序,则这将是一个严重的安全漏洞,用户将不再负责该设备.