Davide Rosa Hack
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("http://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
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)
Attività di Configurazione dei due pulsanti (oltre che i limiti di tempo delle richieste, TimeOut)