[RESOLVIDO] Construir uma aplicação Android que atualiza automaticamente

Olá pessoal!!

Estou fazendo uma aplicação para Android aqui na empresa e já instalei essa aplicação em vários smartphones de clientes.
O problema é que está muito difícil pra atualizar esses softwares porque já são vários aparelhos.

Como que eu posso fazer meu software atualizar automaticamente sem colocar no Android Market? Já tentei colocar numa página na internet, mas os clientes não estão usando cartão de memória em seus aparelhos e não é possível fazer download a partir de uma página.

Alguem tem alguma solução simples?

Obrigada

As soluções de auto-atualizações que usamos aqui é especificio por tablet e nós conversamos com a fabricante para utilizar a API deles.

[quote=eliangela]Olá pessoal!!

Estou fazendo uma aplicação para Android aqui na empresa e já instalei essa aplicação em vários smartphones de clientes.
O problema é que está muito difícil pra atualizar esses softwares porque já são vários aparelhos.

Como que eu posso fazer meu software atualizar automaticamente sem colocar no Android Market? Já tentei colocar numa página na internet, mas os clientes não estão usando cartão de memória em seus aparelhos e não é possível fazer download a partir de uma página.

Alguem tem alguma solução simples?

Obrigada[/quote]

Não é possível fazer o download provavelmente o aparelho não permite instalar aplicativos de terceiros?

Se for isso não vejo outra solução a não ser instruir seus usuários em como alterar a opção nas configurações do aparelho.

[quote=vargas]Não é possível fazer o download provavelmente o aparelho não permite instalar aplicativos de terceiros?

Se for isso não vejo outra solução a não ser instruir seus usuários em como alterar a opção nas configurações do aparelho.[/quote]

Olá vargas!
Com relação aos smartphones, o android não permite download de sites sem um cartão de memória. Eu queria que meu software atualizasse quando tivesse alguma atualização disponivel, assim como acontece com outros softwares vinculados ao Android Market, mas não estou encontrando solução.

Olá Marky!
vc tem algum link que me ajude?

Obrigada

Ops… não sabia dessa… achava que usuário Androide era livre para instalar aplicativos de qualquer lugar…

Obrigado pela informação!

[quote=vargas]Ops… não sabia dessa… achava que usuário Androide era livre para instalar aplicativos de qualquer lugar…

Obrigado pela informação!

[/quote]

Bom, isso eu percebi nos aparelhos samsung. Não sei se isso se aplica a todos os aparelhos.

Olha, encontrei isso num site: http://stackoverflow.com/questions/4967669/android-install-apk-programmatically. acho que resolve meu problema… vou tentar e qualquer coisa eu posto um resultado.

obrigada

Posso perguntar o do porque não utilizar o android market?

[quote=eliangela]

Olá Marky!
vc tem algum link que me ajude?

Obrigada[/quote]

Pior que não, isso foi um acordo comercial com as fabricantes.

Porque o aplicativo pra Android que fizemos aqui é pra integrar com um sistema web que temos aqui na empresa.

Bom… eu fiz um código baseado nesses links:
http://stackoverflow.com/questions/4967669/android-install-apk-programmatically
http://stackoverflow.com/questions/576513/android-download-binary-file-problems

[code]public class Updater {

private static final String RELEASE = "app.apk";

public static void update(Context context) {
	try {
		URL url = new URL(UrlMaker.getAtualizacaoURL(context));
		HttpURLConnection c = (HttpURLConnection) url.openConnection();
		c.setRequestMethod("GET");
		c.setDoOutput(true);
		c.connect();

		final String PATH = "/data/data/br.com.tdta.service/files/" + RELEASE;
		FileOutputStream fos = new FileOutputStream(new File(PATH));

		InputStream is = c.getInputStream();

		byte[] buffer = new byte[1024];
		int len = 0;
		while ((len = is.read(buffer)) != -1) {
			fos.write(buffer, 0, len);
		}
		fos.close();
		is.close();

		Intent intent = new Intent(Intent.ACTION_VIEW);
		intent.setDataAndType(Uri.fromFile(new File(PATH)), "application/vnd.android.package-archive");
		context.startActivity(intent);
	} catch (IOException ex) {
		Toast.makeText(context.getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show();
	}
}

}[/code]

E está dando este erro:

Starting activity: Intent { act=android.intent.action.VIEW dat=file:///data/data/br.com.tdta.service/files/app.apk typ=application/vnd.android.package-archive cmp=com.android.packageinstaller/.PackageInstallerActivity } Activity pause timeout for HistoryRecord{44fee720 br.com.tdta.service/.view.AtualizaDadosFrame} Unable to open zip '/data/data/br.com.tdta.service/files/app.apk': Permission denied to open Zip archive '/data/data/br.com.tdta.service/files/app.apk' Unable to read AndroidManifest.xml of /data/data/br.com.tdta.service/files/app.apk java.io.FileNotFoundException: AndroidManifest.xml

O que eu estou fazendo de errado?

Obrigada

Voce tem as permissões no Manifest da sua aplicação?

São essas:

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

Voce vai precisar de

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

Para ler.

[quote=Marky.Vasconcelos]Voce vai precisar de

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

Para ler.[/quote]

Olá Marky!
Eu coloquei a permissão e ainda deu acesso negado. Então eu coloquei esse código:

try { String command = "chmod 666 " + PATH; Runtime.getRuntime().exec(command); } catch (IOException e) { }

E eu obtive outro erro:

failed to open Zip archive '/data/data/br.com.tdta.service/files/service-release.apk' Unable to read AndroidManifest.xml of /data/data/br.com.tdta.service/files/service-release.apk java.io.FileNotFoundException: AndroidManifest.xml at android.content.res.AssetManager.openXmlAssetNative(Native Method)

Eu mandei escrever o tamanho do APK no dispositivo, e escreveu somente 657, o que é muito estranho, já que o arquivo original tem 130.897 bytes.

Estou verificando o código onde eu baixo o arquivo.

Pessoal, obrigada pela ajuda!

Funcionou aqui.
O problema da permissão funcionou usando o CHMOD, e o problema do arquivo corrompido eu resolvi colocando um .htaccess no servidor (eu tinha esquecido :oops: )

[quote=Marky.Vasconcelos]Voce vai precisar de

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

Para ler.[/quote]
Eu só estou querendo saber onde que vc viu essa permissão, porque eu li todas as permissões listadas em http://developer.android.com/reference/android/Manifest.permission.html e não vi essa que vc falou…

Obrigada

Pior que eu lembro de precisar dessa permission tempos atrás, mas eu procurei nos docs atuais e realmente não tem mais. o.0

Oi,

Estou tentando fazer a mesma coisa, mas na hora da instalação me deparo com esse erro:

Mesmo colocando um inteiro diferente no “android:versionCode=”.

eliangela, poderia me dizer se vc teve esse mesmo erro e se teve como o contornou?

Estou notando que esse erro acontece quando instalo a app no tablet via eclipse. :?