WebGate (Android 2 Arduino)

Questo completa il progetto WebGate della sezione Arduino

Per facilitarci le cose, e non dover salvare nei preferiti un link all'indirizzo riservato all'apertura del cancello, possiamo pensare di sfruttare il nostro cellulare creandoci una piccola applicazione ad hoc.

L'idea è molto semplice, una schermata con un pulsante per chiamare un indirizzo web, ovviamente l'indirizzo dovrà essere quello che date a disposizione per raggiungere la vostra Arduino pronta ad esegure l'apertura del cancello (o qualsiasi altra azione che preferite)..

 

Durante l'esecuzione della richiesta mostriamo la classica progress bar di Android, che andremo a nascondere alla fine della richiesta.

Per gestire la richiesta ho usato una HttpGet eseguendola dentro un AsyncTask.

Potete estendere l'applicazione, sia questa che quella in Arduino, per esempio per gestire un feedback del comando ricevuto.

Includo di seguito il contenuto di

strings.xml

activity_main.xml con il Layout e il codice della mia attività

 

 

strings.xml


<resources>
    <string name="app_name">WebGate</string>
    <string name="btnEseguiChiamata">Esegui Chiamata</string>
    <string name="btnEsci">Esci</string>
</resources>

activity_main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<Button
android:id="@+id/btnEseguiChiamata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btnEseguiChiamata" />

<Button
android:id="@+id/btnEsci"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btnEsci" />

<ProgressBar
android:id="@+id/pbAvviaPagina"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal" />

</LinearLayout>

MainActivity.java, Codice della mia classe MainActivity


public class MainActivity extends Activity {

	Button btnChiamata;
	Button btnEsci;
	ProgressBar pb;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);       
        
        btnChiamata = (Button) findViewById(R.id.btnEseguiChiamata);
        btnEsci = (Button) findViewById(R.id.btnEsci);
        pb = (ProgressBar) findViewById(R.id.pbAvviaPagina);
        
        
        btnChiamata.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				avviaRichiesta("https://www.drhack.it");
			}
		});
        
        btnEsci.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				finish();
			}
		});
        
        chiudiRichiesta();
        
    }
        
    protected class Richiesta extends AsyncTask<HttpGet, Integer, String>
    {    	
        @Override
        protected String doInBackground(HttpGet... params)
        { 	
    		HttpGet request = params[0];
    		DefaultHttpClient client = new DefaultHttpClient();
    		
        	ResponseHandler responseHandler = new BasicResponseHandler();
        	String responseBody = "";
    		try {    			
    			responseBody = client.execute(request, responseHandler);
    		} catch (ClientProtocolException e1) {    			
    			e1.printStackTrace();
    		} catch (IOException e1) {    			
    			e1.printStackTrace();
    		} catch (Exception e1) {    			
    			e1.printStackTrace();
    		}
    	
            return responseBody;
        }        

        @Override
        protected void onPreExecute() 
        {
        	super.onPreExecute();
        	pb.setVisibility(View.VISIBLE);               
        }
        
        @Override
        protected void onPostExecute(String responseBody) {
        	super.onPostExecute(responseBody);
        	chiudiRichiesta();
        }
        
    }    
    public void avviaRichiesta(String strRichiesta) {
    	try	{
    	HttpGet request = new HttpGet(strRichiesta);    	    	
    	Richiesta nuovaRichiesta = new Richiesta();
    	nuovaRichiesta.execute(request);
    	}
    	catch (Exception e) {
    		chiudiRichiesta();
    		e.printStackTrace();
    	}
    }  
    private void chiudiRichiesta() {
        pb.setVisibility(View.INVISIBLE);    
    }

}

 

Ed ecco uno screenshot dell'applicazione sul cellulare

 

 WebGate Android

 Per chi ha voglia di migliorare l'applicazione posso darvi uno spunto, di seguito 2 screenshot dell'applicazione che è attualmente utilizzata per aprire il cancello, gestisce 2 tasti, configurabili all'interno dell'applicazione

 

Attività Principale con la possibilità di attivare la richiesta dei due comandi (due pulsanti)

WebGate Android - grafica main

 

Attività di Configurazione dei due pulsanti (oltre che i limiti di tempo delle richieste, TimeOut)

 

WebGate Android - configura