Autore Topic: come linea di comando?  (Letto 1443 volte)

Offline Sebastian

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
come linea di comando?
« il: 26 Ottobre 2010, 15:16:50 CEST »
0
Ciao a tutti!  :-)
mi è venuta una curiosità:  sarebbe possibile utilizzare android per fare con il cellulare ( e rete UMTS ) quelle tipiche cose che si fanno con pc da linea di comando? ad esempio ping, echo, etc?


I dubbi che sorgono all'improvviso... :-o

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:come linea di comando?
« Risposta #1 il: 26 Ottobre 2010, 15:38:34 CEST »
0
direi proprio di si.
;)
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Sebastian

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
Re:come linea di comando?
« Risposta #2 il: 26 Ottobre 2010, 15:56:35 CEST »
0
mmmhh..... per il WiFiManager ho trovato il metodo PingSupplicant()....  ma per quanto riguarda un ping fatto con l'umts (dal terminale verso la bts) non sono riuscito a trovare niente....suggerimenti?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:come linea di comando?
« Risposta #3 il: 26 Ottobre 2010, 16:23:21 CEST »
+1
approccio banale, che è quello che intendevo io.

Codice (Java): [Seleziona]
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("ping www.google.com -c 1");
proc.waitFor();
int exit = proc.exitValue();
if (exit == 0) { // normal exit
   ...
} else { // abnormal exit, so decide that the server is not reachable
   ...
}

7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Sebastian

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
Re:come linea di comando?
« Risposta #4 il: 27 Ottobre 2010, 13:33:24 CEST »
0
In pratica io vorrei fare un app che da rete umts faccia un ping a google. ho fatto prima un layout con un pulsante (vedi codice dopo),alla pressione del pulsante vorrei che nel textView fosse visualizzato il risultato.

Così ho creato l'activity
Codice (Java): [Seleziona]
public class FarePing extends Activity {
       
        // Tag del Log   
        private final static String LOG_TAG = "PingProva";
        private TextView textOut;
       
         /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        textOut = (TextView) findViewById(R.id.textOut);

 }//fine  onCreate()
 
 
  //-------------- BOTTONE
    public void Statistiche(View button){
        Log.i(LOG_TAG, "Premuto il bottone");
        textOut.append("Risultato del ping" );
       
            }
       
   
}
 

e successivamente una funzione che vorrei chiamare con la pressione del bottone che ho chiamato Ping che esegue il ping vero e proprio(fatta con il codice da te indicato):
Codice (Java): [Seleziona]
public class Ping {
       
         String LOG_TAG1 = "Funzione Ping";
       
        public OutputStream lancia() {
               
                OutputStream as;       
               
                try{
                       
               
                Runtime runtime = Runtime.getRuntime();
                Process proc = runtime.exec("ping www.google.com -c 1");
                proc.waitFor();
                int exit = proc.exitValue(); //dice se l'esecuzione è finita normalmente
               
                if (exit == 0) {
                       
                        Log.i(LOG_TAG1, "ping andato a buon fine");
                        return as= proc.getOutputStream();
                   
                } else {
                               
                        Log.i(LOG_TAG1, "ping non riuscito");
                        return as= proc.getOutputStream();
                        }
               
                } catch(Exception e){
                        Log.i(LOG_TAG1, "eccezione causata dal ping");
                                };
       
                };
               
               
}
Ora le domande che mi faccio sono 2:
- perchè mi dà errore sulla funzione lancia() visto che io indico sempre il valore di ritorno?
- come potrei fare per visualizzare un OutputStream (o meglio ancora:il risultato del ping)sullo schermo? (al limite anche dentro la textView)

Grazie dell'aiuto!

PS: il layout è:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"    
        android:background="@color/light_gray">
       
       
        <TextView android:layout_width="fill_parent"
            android:id="@+id/textOut"
                android:layout_height="wrap_content"
                android:text="Prova di ping"
          android:textColor="@color/blue"/>
               

               
        <Button android:id="@+id/Statistiche"
                android:onClick="Statistiche"
            android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="invia ping"
                android:gravity="left"></Button>
               
</LinearLayout>

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:come linea di comando?
« Risposta #5 il: 27 Ottobre 2010, 14:27:01 CEST »
0
1. Che tipo di errore ti da? Devi sempre indicarne il tipo (compilazione e/o runtime; se runtime, incollare il logcat)
    Suggerimento: visto che il metodo restituisce un valore, tu DEVI restituire un valore compatibile con il tipo dichiarato.

2. Ping non è un bottone, ma una classe che fa qualcosa.
Per eseguirla dovrai, chiaramente, crearne un'istanza ed invocare il metodo lancia().

3. Leggi quì, così capisci bene come metterti in ascolto di un evento onclick del pulsante con id "Statistiche".

4. Per prendere il risultato del ping, prova a vedere come funziona la classe Process.

5. Per poter leggere il tuo OutputStream devi convertirlo in un InputStream e leggerne il contenuto.
Ecco quì qualche suggerimento per la conversione

6. Per scrivere il contenuto di ciò che hai nell'InputStream, non devi fare altro che riempire il contenuto di "TextOut".

Le domande che sollevi e ciò che scrivi mi fanno capire che sei nuovo, sia di Java che di Android.
Sarebbe bene che facessi un pò di pratica con Java, prima di cimentarti direttamente con Android, altrimenti rischi di avere delle carenze basilari.
Segui un buon tutorial su Java, e, appena ti senti di padroneggiarlo un minimo, prova a seguire i tutorial base di android, in cui c'è tutto ciò che hai chiesto.

Non prenderla sul personale, voglio solo farti capire che il tuo approccio deve essere differente.
Se hai altri dubbi, nessuno ha problemi a rispondere, solo che ci si aspetta un interlocutore che conosca ciò di cui parliamo quì.

un saluto.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Sebastian

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • Mostra profilo
Re:come linea di comando?
« Risposta #6 il: 27 Ottobre 2010, 15:16:02 CEST »
0
Scusami ma è indubbio che sia stato poco chiaro nell'esprimermi, colpa mia! ma andiamo per gradi:

- é altrettanto indubbio che sono abbastanza nuovo di java ma ti garantisco che  i punti 2 e 3 sono molto chiari anche per me.. in realtà ho messo il codice dell'activity solo per dare un idea di come sarà l'app (se leggessi attentamente vedresti che le mie domande non hanno nulla a che fare con errori sull'activity FarePing)

- per il punto 4, avevo già visto come funziona la classe Process...     altrimenti perchè avrei dovuto chiedere informazioni su OutputStream?

- L'unica domanda che avevo era su  qualche informazioni sul tuo punto 5 e 6 (e ti ringrazio del suggerimento)

Non prenderla sul personale, ma in generale leggi attentamente qual'è la domanda, per non perdere tempo con risposte che non servono.
 E poi, a proposito di tempo perso, per il futuro  decidi di dare un aiuto solo quando non ti scoccia perdere del tempo con qualcuno che tu presuma
Citazione
non conosca ciò di cui parliamo quì.



Grazie mille dei suggerimenti
un saluto

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:come linea di comando?
« Risposta #7 il: 27 Ottobre 2010, 15:49:00 CEST »
0
Oh, ma il mio non è perdere tempo, perché non ti avrei risposto, altrimenti.

Solo che a volte cercando su google si trovano molte più risposte di quante se ne trovano quì, e molto più velocemente.
 ;-)
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/