HttpURLConnection com android 2.3 e android 4.0

porque esse código funciona no android 2.0 e não funciona no android 4.0

public void updateApk(Context c) {
        
    	final String PATH = c.getFilesDir().getAbsolutePath() + File.separator
                + "soft.apk";
        try {
        	
            URL url = new URL(
                    "http://www.meusite.com.br/atualizacao/downloadandroid/soft.apk");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setConnectTimeout(500);
            con.setRequestMethod("GET");
            con.setDoOutput(true);
            con.connect();
            FileOutputStream fos = c.openFileOutput("soft.apk",
                    Context.MODE_WORLD_READABLE);
           
            InputStream is = con.getInputStream();
            
            int len = 0;
            byte[] buffer = new byte[20480];
            while ((len = is.read(buffer)) != -1) {
                fos.write(buffer, 0, len);
            }
 
            is.close();
            fos.close();
             con.disconnect();
            try {
                String command = "chmod 777 " + PATH;
                Runtime.getRuntime().exec(command);
            } catch (Exception e) {
 
            }
        } catch (Exception e) {
 
        }
        Intent installIntent = new Intent(Intent.ACTION_VIEW ); 
        installIntent.setDataAndType( Uri.parse("file://" + c.getFilesDir().getAbsolutePath() + "/" + "soft.apk"), "application/vnd.android.package-archive"); 
        startActivity(installIntent); 
   /*     Intent installIntent = new Intent(Intent.ACTION_VIEW);
        installIntent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/" + "soft.apk")), "application/vnd.android.package-archive");
        startActivity(installIntent);*/
    }

Não tenho certeza a partir de qual versão, mas acho que da 3 pra frente qualquer conexão vc não pode fazer direto na activity…

daí vc faz mais ou menos assim:

new Thread (new Runnable(){
public void run() {

aqui vc conecta na url e faz o que tem que fazer...
   pelo que vi, vc vai baixar um arquivo e instalar ele... recomendo que vc faça uma função por fora, e chame ela aqui, pra ficar mais organizado.

};
}).start();

ou então, se vc chamar a função “updateApk” dentro de uma thread, provavelmente também vai funcionar…

new Thread (new Runnable(){
public void run() {
updateApk(Context);
};
}).start();

faz aí e fala se deu…

Muito obrigado!
agora conectou!
porem não está atualizando!
tem alguma ideia do que pode ser?

sei lá. vc tem que debugar e ver onde ele pára…

aquele timeout lá em cima que vc colocou 500, não é em milisegundos? pode ser isso…

no meu atualizador eu fiz um pouco mais organizado, fiz uma função só pra baixar o apk, e fiz outra função só pra instalar… acho que fica mais organizado assim…

public boolean BaixaArquivo(String link, String nome) {

	int count;
	
	try {
	URL url = new URL(link);
	URLConnection conexion = url.openConnection();
	conexion.connect();

	int lenghtOfFile = conexion.getContentLength();

	InputStream input = new BufferedInputStream(url.openStream());
	OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory() + "/" + nome);

	byte data[] = new byte[1024];

	long total = 0;

	while ((count = input.read(data)) != -1) {
	    total += count;
	    output.write(data, 0, count);
	}

	output.flush();
	output.close();
	input.close();
	installApk(Classe.this, nome);
	return true;
	} 
	catch (Exception e) {
		return false;
	}
}

public void installApk(Context c, String fileName) {
String AppInst = Environment.getExternalStorageDirectory() + “/” + fileName;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(AppInst)), “application/vnd.android.package-archive”);
c.startActivity(intent);
}

ve o que vc aproveita daí…

lembrando que no manifest tem que ter pelo menos essas 3 permissões:

write_external_storage
write_owner_data
internet

Está funcionado perfeitamente, muito obrigado!