Установите приложение Android без вывода сообщений по воздуху, как это делает Google Play

Мне нужно установить файл 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();
        }
    }

Но я получаю сообщение об ошибке Neither user 10057 nor current process has android.permission.INSTALL_PACKAGES, хотя я добавил это разрешение в свой файл манифеста.

Мое устройство не рутировано, и я хочу, чтобы оно обходилось без рутирования. Во многих ответах я обнаружил, что это невозможно по соображениям безопасности, которые они не разрешают, но если это возможно с PlayStore и AndroidLost, то почему бы не с нами?

Пожалуйста, мне нужна помощь, если это возможно!

Спасибо,


person Nirav Dangi    schedule 15.04.2013    source источник
comment
Невозможно сказать достаточно часто: в системе Android предполагается, что пользователь отвечает за все. Это правило было бы нарушено, если бы то, что вы хотите, было возможно. Так что не тратьте время на такие мысли.   -  person class stacker    schedule 15.04.2013
comment
Спасибо @ClassStacker, но не могли бы вы объяснить, как работает slient установка с приложением AndroidLost?   -  person Nirav Dangi    schedule 15.04.2013
comment
люди, которые дают отрицательные голоса, пожалуйста, найдите время для комментариев   -  person Nirav Dangi    schedule 15.04.2013
comment
Ладно, извини, что спросил. Пожалуйста, не принимайте это на свой счет.   -  person class stacker    schedule 15.04.2013


Ответы (1)


Мое устройство не рутировано, и я хочу, чтобы оно обходилось без рутирования

Это невозможно на Android для сторонних приложений. Google Play может это сделать, потому что он установлен в /system/app вместо /data/app. Если вы можете убедить любого OEM-производителя или производителя ПЗУ разместить ваше приложение в системном разделе, вы можете использовать разрешение INSTALL_PACKAGES, поскольку оно предоставляется только системным приложениям.

В любом случае, это антипаттерн Android. Если бы вам было позволено произвольно устанавливать приложения без согласия пользователя, это было бы серьезной дырой в безопасности, и пользователь больше не отвечал бы за устройство.

person Raghav Sood    schedule 15.04.2013
comment
на самом деле спасибо за ответ .. тогда что насчет приложения AndroidLost .. они также обеспечивают скрытую установку .. - person Nirav Dangi; 15.04.2013
comment
@NiravDangi Android Lost, похоже, не имеет автоматической установки. Устанавливается через гугл плей... - person Raghav Sood; 15.04.2013
comment
Да, вы правы, он использует GooglePlay .. спасибо - person Nirav Dangi; 15.04.2013
comment
еще один вопрос. FDroid также имеет эту функцию, и я думаю, что он не использует googleplay.. пожалуйста, проверьте f-droid.org - person Nirav Dangi; 15.04.2013
comment
@NiravDangi Все еще не бесшумная установка. Вы загружаете apk на свое устройство и устанавливаете его вручную. - person Raghav Sood; 15.04.2013
comment
благодаря. мое время сэкономлено.. - person spr; 20.06.2013