2013-03-13 1 views
2

Возможно, этот вопрос был задан ранее, но не получил четкого ответа. Я в основном не хочу и клиент взаимодействий с обновлениями и другими вещами, все, что они могут видеть, это приложение работает, и они счастливы. Но для этого мне нужен какой-то фоновый поток или что-то, что проверяет рынок для нового обновления и обновляет его позади и после применения обновления перезагружает приложение.Возможно ли обновить приложение для Android во время его работы, а затем перезагрузить его снова.

P.S. Я совершенно новый для андроида развития так очень жаль, если я звучащий с умом, но это мое требование

+3

Как пользователь android, я был бы подозрительным и раздраженным приложением, которое исказило мои системные настройки, чтобы отключить автоматические обновления. Сетевой трафик не всегда свободен, и он также будет очень похож на вредоносное ПО для неподготовленного глаза. Протезируйте! –

+2

Приложение Play Store позаботится об обновлении **, если ** пользователь включит автоматическое обновление. И мне тоже, я не хочу, чтобы приложения проверяли новую версию. Это избыточно. – 2013-03-13 02:13:10

+0

@RonDahlgren приложение, которое мы создаем, больше похоже на приложение Kiosk, поэтому наши клиенты заботятся только о том, что он работает должным образом или нет. – nipun

ответ

3

AFAIK, это возможно, если у вас есть корневой доступ, процесс подобен следующему:

  1. Вашего приложению находится в /system/app папке (как приложение системы)
  2. Вам необходимо следующие разрешения:

    android.permission.INSTALL_PACKAGES 
    android.permission.DELETE_PACKAGES 
    android.permission.CLEAR_APP_CACHE 
    android.permission.WRITE_EXTERNAL_STORAGE 
    android.permission.MOUNT_UNMOUNT_FILESYSTEMS 
    
  3. Ваше приложение должно быть подписано с системой подписи

    java -jar signapk.jar platform.x509.pem platform.pk8 helloworld.apk hello.apk 
    
  4. Проверить наличие обновлений в фоновом потоке и скачать обновленный .apk файл на временное место, например apk_path

  5. Выполнить pm install apk_path команду программно, ниже фрагмент кода:

    public String silentInstallation(String apkPath) 
    { 
         String[] args = { "pm", "install", "-r", apkPath };    
         ProcessBuilder processBuilder = new ProcessBuilder(args); 
         Process process = null; 
         InputStream errIs = null; 
         InputStream inIs = null; 
         try { 
          ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
          int read = -1; 
          process = processBuilder.start(); 
          errIs = process.getErrorStream(); 
          while ((read = errIs.read()) != -1) { 
           baos.write(read); 
          } 
          baos.write('\n'); 
          inIs = process.getInputStream(); 
          while ((read = inIs.read()) != -1) { 
           baos.write(read); 
          } 
          byte[] data = baos.toByteArray(); 
          result = new String(data); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } finally { 
          try { 
           if (errIs != null) { 
            errIs.close(); 
           } 
           if (inIs != null) { 
            inIs.close(); 
           } 
          } catch (IOException e) { 
           e.printStackTrace(); 
          } 
          if (process != null) { 
           process.destroy(); 
          } 
         } 
         return result; 
    } 
    

Надеюсь, что это поможет.

+0

отредактировал мой ответ, да, вы должны убедиться, что ваше приложение находится в «/ system/app». – bjzhanghao

+0

Да, я это сказал. – bjzhanghao

+0

Было бы неплохо, если бы вы могли форматировать свой код немного лучше. Благодарю. – Kev

3

Вы не можете обновить (или установить) приложение без пользовательского взаимодействия, если

  1. Вы не будете приложение системы (пользовательские ROM)
  2. Ваше устройство коренится и ваша программа обновления имеет привилегии суперпользователя.

Кроме того, нет официального API-интерфейса, доступного для проверки версии приложения, доступного в магазине Google Play.

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

На практике вы не можете делать тихие установки/обновления без взаимодействия с пользователем, и это хорошая вещь (tm) по причинам, которые заявили первые пару комментаторов.