Android – Aggiornare la mia App senza l’utilizzo del Play Store (Parte 2)

Come facciamo ad aggiornare la nostra applicazione Android in un Rete Aziendale senza accesso ad Internet e quindi senza l’appoggio del Play Store di Google? Dopo aver effettuato delle ricerche senza una risposta ben precisa ho deciso di effettuare manualmente tutti gli step sfruttando le mie REST API (in Java) interne:

  1. Richiesta alle API per il codice dell’ultima versione della mia App.
  2. Confronto sul Device tra la versione installata e l’ultima rilasciata.
  3. Download del pacchetto di installazione dell’App aggiornata.
  4. Installazione sul Device.

Nella Parte 1 abbiamo affrontato i passi 1 e 3, quelli relativi alle nostre REST. Questa volta invece affrontiamo i passi 2 e 4.

CONFRONTO VERSIONE INSTALLATA SU DEVICE E VERSIONE RICEVUTA DAL SERVER

private ProgressDialog mProgressDialog;

private void checkVersion()
{
	mProgressDialog = new ProgressDialog(Activity.this);
	mProgressDialog.setMessage(getResources().getString(R.string.la_UpgradingMessage));
	mProgressDialog.setIndeterminate(false);
	mProgressDialog.setMax(100);
	mProgressDialog.setProgressNumberFormat("");
	mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
	mProgressDialog.setCancelable(false);

	CheckUpgradeActionTask downloadFile = new CheckUpgradeActionTask();
	downloadFile.execute();
}

public class CheckUpgradeActionTask extends AsyncTask
{
	ProgressDialog dialog;

	public CheckUpgradeActionTask()
	{
		dialog = new ProgressDialog(Activity.this);
	}

	@Override
	protected void onPreExecute()
	{
		this.dialog.setCancelable(false);
		this.dialog.setTitle(getResources().getString(R.string.Waiting));
		this.dialog.setMessage(getResources().getString(R.string.la_CheckUpgradeMessage));
		this.dialog.show();
	}

	@Override
	protected String doInBackground(Void... params)
	{
		alertError.setCancelable(false);
		String currentVersion = "";
		currentVersion = HttpJsonClient.getInstance().doGet("myapp/version/getAppVersion", String.class);
		return currentVersion;
	}

	@Override
	protected void onPostExecute(String currentVersion)
	{
		if (dialog.isShowing())
			dialog.dismiss();

		int serverVersion = Integer.parseInt(currentVersion);

		PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
		if (serverVersion > pInfo.versionCode)
		{
			DownloadFile downloadFile = new DownloadFile();
			downloadFile.execute(Global.REST_API_BASE_URL_PREFERENCE + "myapp/version/downloadApp");
		}

	}
}

DOWNLOAD E INSTALLAZIONE

Una volta verificata che versione del server è maggiore di quella installata, viene lanciato il task per il download e installazione del pacchetto di installazione.

private class DownloadFile extends AsyncTask
{
	@Override
	protected String doInBackground(String... sUrl)
	{
		URL url = new URL(sUrl[0]);
		URLConnection connection = url.openConnection();
		connection.connect();
		int fileLength = connection.getContentLength();

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

		byte data[] = new byte[1024];
		long total = 0;
		int count;
		while ((count = input.read(data)) != -1)
		{
			total += count;
			publishProgress((int) (total * 100 / fileLength));
			output.write(data, 0, count);
		}

		output.flush();
		output.close();
		input.close();

		return true;
	}

	@Override
	protected void onPreExecute()
	{
		super.onPreExecute();
		mProgressDialog.show();
	}

	@Override
	protected void onProgressUpdate(Integer... progress)
	{
		super.onProgressUpdate(progress);
		mProgressDialog.setProgress(progress[0]);
	}

	@Override
	protected void onPostExecute(boolean result)
	{
		if (result)
		{
			Intent intent = new Intent(Intent.ACTION_VIEW);
			intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/Download/MyApp.apk")),
					"application/vnd.android.package-archive");
			startActivity(intent);
		}

	}
}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *