Estamos escribiendo una aplicación para Android que muestra los anuncios en las pantallas grandes.
Tenemos un servidor donde los anunciantes pueden seleccionar los anuncios, por lo que se actualizan de forma casi instantánea.
Porque habrá un montón de Android cuadros de ejecución (conectado a HDMI pantallas), debemos ser capaces de actualización de nuestro software de forma remota.

Este es el caso de:

Principal de la aplicación se está ejecutando continuamente (a menos que se desactive) y los usuarios nunca ver nada relacionado Android.
Necesitamos una actualización de la aplicación que está a la escucha de las actualizaciones y eliminaciones de los principales apk, se instala un nuevo archivo apk.
Mientras que la actualización vamos a mostrar una actividad con «la Actualización, por favor espere», hasta que el nuevo principal de la apk se instala y mostrando.

Lo que necesitamos:

Necesitamos ayuda sobre cómo implementar el mecanismo de actualización sin preguntar al usuario en el DISPOSITIVO de raíces.

Lo que tenemos:

La aplicación de actualización y se engancha en el arranque recibido el evento, donde se inicia un servicio (este servicio se prestará atención a las actualizaciones, que será implementado por un colega pronto).
El servicio puede iniciar una actividad en la que solicitará la actualización de la información durante la actualización.

En el actualizador de la actividad

 try {
            Process proc = Runtime.getRuntime().exec(new String[]{"su", "pm install -r /mnt/sdcard/MYFOLDER/testAPK.apk"});
            stringBuilder.append(String.valueOf(proc.waitFor()));
            stringBuilder.append("\n");
        } catch (Exception e) {
            if (e instanceof IOException) {
                Log.d(TAG, "IOException");
            } else if (e instanceof InterruptedException) {
                Log.d(TAG, "InterruptedException");
            } else {
                e.printStackTrace();
            }
        }

StringBuilder imprime el número 11, pero hace lo mismo si le doy al azar unexisting comando..

En el Manifiesto

<!-- Permission to start UpdaterService on boot -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<!-- Install/delete permissions, only granted to system apps -->
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Los paquetes de Instalación y eliminar los paquetes son inútiles si no quiero instalar mi aplicación como aplicación del sistema, estoy en lo correcto?

Cortocircuito largo de la historia, no de la instalación de mi prueba APK, y no tengo idea de cómo solucionar esto.
Cualquier ayuda se agradece!

  • si no tiene acceso de root, poner la actualización de la aplicación en /system/app/ y obtendrá la INSTALL_PACKAGES y DELETE_PACKAGES permiso
InformationsquelleAutor TomCB | 2014-11-14

1 Comentario

  1. 27

    Usted puede simplemente utilizar adb install para instalar/actualizar el APK en silencio. Código de ejemplo está por debajo de

    public static void InstallAPK(String filename){
        File file = new File(filename); 
        if(file.exists()){
            try {   
                String command;
                command = "adb install -r " + filename;
                Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command });
                proc.waitFor();
            } catch (Exception e) {
            e.printStackTrace();
            }
         }
      }

    O

    Por favor, compruebe
    http://paulononaka.wordpress.com/2011/07/02/how-to-install-a-application-in-background-on-android/

    • De donde sacas la StringUtil clase?
    • comprobar mi respuesta actualizada
    • Funciona, he utilizado «pm instalar» en lugar de «adb install»! Gracias!
    • El Dispositivo De Raíces Necesario! Trabajando como un encanto, su necesidad de los comandos dispositivo de raíces
    • Pero en la construcción de producción de la tableta, ¿Cómo puedo lograr este proceso?
    • Hey puedo comprobar con usted con respecto a instalado correctamente, ¿cómo puedo acceder a el número de versión de la apk? También, ¿cómo puedo saber si el último apk se ha instalado la aplicación para realizar una actualización?
    • Respuesta para acceder a la versión de la apk «shell dumpsys paquete de mi.paquete | grep versionName» Acerca de, ¿cómo puedo saber si el último apk se ha instalado la aplicación para realizar una actualización? – Por favor, elaboración de este
    • Me sale el siguiente error "Cannot run program \"su\": error=13, Permission denied".
    • Donev: Primero de todo lo siento por la respuesta tardía, por favor hágamelo saber acerca de AndroidManifest.xml permiso

Dejar respuesta

Please enter your comment!
Please enter your name here