Actualización de una aplicación OTA

Estoy desarrollando una aplicación que estará disponible en un sitio web (probablemente también en el mercado). El problema que tengo en este momento es cómo manejar las actualizaciones de la aplicación. Sé cómo comparar la versión con la actual y sé si necesito actualizarla. La pregunta es ... ¿cómo?

¿Hay alguna forma de descargar un APK desde el sitio web y comenzar el proceso de instalación? El usuario tendrá que confirmar, por supuesto, pero solo quiero poder iniciarlo por él. En este momento estoy haciendo esto:

private void doUpgrade() {
    // TODO Auto-generated method stub
    Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(getString(R.string.upgrade));
    builder.setIcon(R.drawable.help);
    builder.setMessage(getString(R.string.needUpgrade));
    builder.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub

            Map<String, String> data = new HashMap<String, String>();

            try {
                HttpResponse re = Registration.doPost("http://www.android-town.com/appRelease/AndroidTown.apk",data);

                int statusCode = re.getStatusLine().getStatusCode();
                closeApp();

            } catch (ClientProtocolException e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), getString(R.string.noURLAccess), Toast.LENGTH_SHORT).show();
                closeApp();
            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), getString(R.string.noURLAccess), Toast.LENGTH_SHORT).show();
                closeApp();
            }
        }
    });
    builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            dialog.cancel();
            closeApp();
        }
    });
    builder.show();
}

Pero en realidad no hace nada ... ¿debo abrir un webView con la URL? ¿Un nuevo hilo ejecutable? ¿Cualquier otra manera? Por favor ayuda :)

Salud

Respuestas a la pregunta(3)

Su respuesta a la pregunta