package com.merybere.app.services; import android.os.Bundle; import android.os.Handler; import android.os.ResultReceiver; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.ProgressBar; public class MainActivity extends Activity { // Objeto parcelable, que pasaremos en el intent MyResultReceiver resultReceiver = new MyResultReceiver(); private ProgressBar progressBar; private ImageView imageView; private LoadImageAsyncTask task; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); progressBar = (ProgressBar) findViewById(R.id.progressBar1); // Ocultar inicialmente la barra de progreso. Estados: // INVISIBLE: no se muestra pero se respeta el espacio que ocupa // GONE: ocultarla y liberar el espacio // VISIBLE progressBar.setVisibility(View.INVISIBLE); // View para cambiar la imagen imageView = (ImageView) findViewById(R.id.imageView1); // Definimos el m�todo a llamar al hacer click findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Intent con la acci�n que hemos llamado en el filtro en el manifiesto Intent service = new Intent("com.merybere.app.ACTION_SERVICE"); // Iniciar el servicio startService(service); } }); findViewById(R.id.button2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent service = new Intent("com.merybere.app.ACTION_INTENT_SERVICE"); // Pasarle al mensajero (intent) un objeto a trav�s del que nos vamos a comunicar // Este objeto nos devolver� estados service.putExtra("com.merybere.app.EXTRA_MYRESULTRECEIVER", resultReceiver); startService(service); } }); } // Lanzar la tarea en segundo plano @Override protected void onStart() { super.onStart(); // Cargar la tarea as�ncrona, con el imageView task = new LoadImageAsyncTask(imageView); // Ejecutar la tarea, pas�ndole la string con la url de una imagen task.execute("http://www.android.com/images/marquee_jb.png"); } // Parar la tarea cuando acaba @Override protected void onStop() { if(task != null) { // Intentar parar la tarea task.cancel(true); } super.onStop(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } // Clase que android utiliza internamente para enviar y recibir resultados class MyResultReceiver extends ResultReceiver { // Constructor: pide un handler, para comunicar desde hilos secundarios al hilo principal public MyResultReceiver() { super(new Handler()); } // resultCode es un resultado num�rico con el que interactuamos (id del estado) // resultData nos podr�a pasar otros datos extra @Override protected void onReceiveResult(int resultCode, Bundle resultData) { super.onReceiveResult(resultCode, resultData); // Mostrar y ocultar la barra de progreso al recibir el c�digo correspondiente switch (resultCode) { case 1: progressBar.setVisibility(View.VISIBLE); break; case 0: progressBar.setVisibility(View.INVISIBLE); break; default: break; } } } }