-3

我需要在没有任何用户提示的情况下安装 apk 文件,就像 Google PlayStore 一样。我知道这个问题已经被问过很多次了,但我仍然没有找到任何可解决的答案。我只是从我的 sdcard 安装应用程序,我尝试了以下方式,

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

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

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

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

谢谢,

4

1 回答 1

7

我的设备没有植根,我希望它不生根

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

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

于 2013-04-15T11:14:34.360 回答