На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Hsilgos
  
> Инсталляция .apk и запуск. , А еще, как определить, не отказался ли пользователь от установки?
    Есть приложение, которое качает и ставит другое приложение... ну или свою часть.

    Установка происходит так:

    ExpandedWrap disabled
          Intent intent = new Intent(Intent.ACTION_VIEW);
              intent.setDataAndType(uri, "application/vnd.android.package-archive");
              startActivityForResult(intent, INSTALL_APPLICATION_CODE);


    Т.е. оп задумке, после установки мы должны получить некий результат и запустить это приложение. Примерно так:

    ExpandedWrap disabled
          protected void onActivityResult(int requestCode, int resultCode, Intent data) {
              super.onActivityResult(requestCode, resultCode, data);
              
      ***        
              case INSTALL_APPLICATION_CODE:
                  performSelection(installingFormIndex);
                  break;
      ***
          }


    Все как бы хоршо, но есть одна проблема... или даже две.

    Первая и главная заключается в том, что после установки метод PerformSelection фактически запускает только что установленный пакет:

    ExpandedWrap disabled
                  Intent intent = new Intent(START_FORM_ACTION);
                  intent.setDataAndType(ContentUris.withAppendedId(Forms.CONTENT_URI, form.getId()), "vnd.android.cursor.item/vnd.icertainty.form");
                  intent.setPackage(info.packageName);
                  
                  FormManager.lastOpendForm = form;
                  
                  startActivityForResult(intent, OPEN_FORM_CODE);


    Но если это происходит сразу, то приложение не запускается. Говорит, что типа установленный пакет остановлент неожиданно... с логах и че-то ничего не нашел... Скорее всего не туда смотрел. В отладчике тоже собо ничего не показывает. (Кстати, может я незнаю, как им правильно пользоваться. Про это ниже)

    Но, если придержать выполнение на входе performSelection то приложение открывается. (Добавлено: Тут я похоже ошибся, почему-то вариант с "подождать" больше не работает.)

    Т.е. такое ощущение, что на момент запуска пакет еще не доконца установлен, или система не знает, что он уже установлен...

    Если потом, уже из контрола тьфу, из вью вызвать этот метод, то все запускается и работает как положено.

    Само приложение стартаует с фоновой загрузкой данных. Достаточно длинной. Прям в onCreate запускается AsyncTask.

    Еще не понятно, как-то вообще можно в методе onActivityResult определить, поставил пользователь приложение или отказался от установки,

    По поводу правильного использования дебаггера... В нашем случае получается, что есть основное прилоежение и второе.
    Основное загружает второе, типа новые версии и т.п. и запускает его таким образом. Получается, что если я из эклипса запускаю отладку на втором приложении, то все равботает. А если на первом, то посмотреть почему не запускается второе не получается, т.к. отладчик на основном... Может можно как-то его подключать по особому?
    Сообщение отредактировано: Felan -
      Цитата Felan @
      Получается, что если я из эклипса запускаю отладку на втором приложении, то все равботает. А если на первом, то посмотреть почему не запускается второе не получается, т.к. отладчик на основном... Может можно как-то его подключать по особому?

      В DDMS Perspective можно выбрать отлаживаемый процесс.
        Цитата [S]mike @
        В DDMS Perspective можно выбрать отлаживаемый процесс.

        Ага, точно...

        Только поулчается, что этого процесса нет в списке. Т.е. я останавливаю отладчик на performSelection. Все хорошо, должно сейчас ставиться. Запускаю, быстро переключаюсь на DDMS вью, а там прочесса этого нет. И он там так и не появляется. А падает так же...
          Вообще подход неправильный. Такое поведение вроде как преследуется со стороны гугла (в новом гугл маркете вроде даже не рассылается com.android.vending.INSTALL_REFERRER) и правильно. Потому как эффект упрощения пары кликов пользователю не компенсирует риск со стороны безопасности. Андроид - это loosely coupeled система, поэтому задача программы если есть компонент (пользователь поставил) - использовать, а если нет, то работать как есть :yes:

          Если для установки используется маркет, то можно в onResume проверять, установлен ли нужный класс активити. То есть когда запускается маркет - вызвавшая его активити уходит в onPause, а когда маркет закроется (после установки приложения или без), то будет вызываться onResume.
          Сообщение отредактировано: [S]mike -
            Цитата [S]mike @
            Вообще подход неправильный.

            Тут сложно спорить, но пока вариантов нет.

            Цитата [S]mike @
            в новом гугл маркете вроде даже не рассылается com.android.vending.INSTALL_REFERRER

            Не понимаю о чем ты.


            Цитата [S]mike @
            Андроид - это loosely coupeled система, поэтому задача программы если есть компонент (пользователь поставил) - использовать, а если нет, то работать как есть

            Ну вобщем-то примерно так и есть.

            Цитата [S]mike @
            Если для установки используется маркет, то можно в onResume проверять, установлен ли нужный класс активити. То есть когда запускается маркет - вызвавшая его активити уходит в onPause, а когда маркет закроется (после установки приложения или без), то будет вызываться onResume.


            Нет, к гугл-маркету это не имеет отношения. Это, если можно так сказать, корпоративное прилоежение, которое со своего сервера ставит отдельные части.

            Про onPause и onResume расскажи по подробнее? Может устанавливаем просто не правильно.

            Как я понимаю, когда вызывается Intent типа VIEW (точно не помню), текущая активити автоматически в паузу уходит. Потом происходит установка, которая не имеет отношения никакого к приложению вызвавшего Intent. Это все происходит на уровне системы. И потом, когда весь процесс завершился так или иначе (приложение об этом не должно ничего знать в принципе) вызвовшая активити сама выйдет из паузы в резьюм?

            Я к чему, может тогда стартавать установку без ожидания результат, как у нас сейчас, а просто. А в резьюме потом проверять, была ли установка или нет? И уже из резьюма запусть только что установленную часть?

            Или как?
              Цитата Felan @
              Не понимаю о чем ты.

              Ну это такое сообщение, которое установщик должен отправлять после установки приложения.


              Вот эту диаграмму нужно в Андроиде понимать и выучить как таблицу умножения ;)
              user posted image
              Описание: http://developer.android.com/reference/and...p/Activity.html

              Цитата Felan @
              Как я понимаю, когда вызывается Intent типа VIEW (точно не помню), текущая активити автоматически в паузу уходит.

              Именно.

              Цитата Felan @
              И потом, когда весь процесс завершился так или иначе (приложение об этом не должно ничего знать в принципе) вызвовшая активити сама выйдет из паузы в резьюм?

              Из паузы активити выходит перед показом его пользователю. То есть например когда установщик закроется, то по стеку будет осуществлен переход к предыдущей - то есть запускавшей этот установщик - активити. Или если пользователь сам в эту активити перейдет.

              Цитата Felan @
              А в резьюме потом проверять, была ли установка или нет? И уже из резьюма запусть только что установленную часть?

              Я думаю, это оптимальное решение.
                Цитата [S]mike @
                Вот эту диаграмму нужно в Андроиде понимать и выучить как таблицу умножения

                Ну да, видел, читал.

                Цитата [S]mike @
                Из паузы активити выходит перед показом его пользователю. То есть например когда установщик закроется, то по стеку будет осуществлен переход к предыдущей - то есть запускавшей этот установщик - активити. Или если пользователь сам в эту активити перейдет.

                Ну да, я это и имел ввиду.


                Цитата [S]mike @
                Я думаю, это оптимальное решение.

                Ну вот мне сейчас тоже так кажется.

                Спасибо.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0289 ]   [ 15 queries used ]   [ Generated: 27.04.24, 11:39 GMT ]