2012-04-30 15 views
8

Ciao sto lavorando ad un'app per Android che richiede l'invio di una stringa tramite Wi-Fi al PC con conseguente simulazione dei tasti della tastiera. Qualche idea su come posso ottenere questo compito?come inviare una stringa da Android a PC tramite Wi-Fi

+0

È possibile utilizzare questo link [inserire descrizione collegamento qui] (http://stackoverflow.com/questions/10388250/how-to-send-string- da-android-to-pc-over-wifi? noredirect = 1 & lq = 1) –

+0

Scusami Puoi usare questo link: [inserisci la descrizione del link qui] (http://stackoverflow.com/questions/31611593/send-text- da-android-to-pc-via-wi-fi-connessione?noredirect = 1 & lq = 1) –

risposta

28

Si dovrà scrivere un programma server sul PC e utilizzare un ServerSocket per accettare una connessione da e scrivere un filo per il vostro telefono Android che utilizza una presa normale (con la stessa porta come la fine del PC) e quindi gestirli utilizzando DataInputStream e DataOutputStream. Devi anche aprire le autorizzazioni sul tuo AndroidManifest.xml.

Per i permessi utilizzare questo:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

Per il codice qui è un piccolo esempio:

Server:

String msg_received; 

ServerSocket socket = new ServerSocket(1755); 
Socket clientSocket = socket.accept();  //This is blocking. It will wait. 
DataInputStream DIS = new DataInputStream(clientSocket.getInputStream()); 
msg_received = DIS.readUTF(); 
clientSocket.close(); 
socket.close(); 

Cliente:

Socket socket = new Socket("192.168.0.1",1755); 
DataOutputStream DOS = new DataOutputStream(socket.getOutputStream()); 
DOS.writeUTF("HELLO_WORLD"); 
socket.close(); 
+0

ok ho effettuato la connessione socket del server client e il server mi ha avvisato se la connessione è stata stabilita, ma come posso fare in modo che il client mi avvisi della connessione? –

+0

È possibile utilizzare socket.isConnected() –

0

Non posso offrirti il ​​codice completo ma almeno posso guidarti nella giusta direzione. Per ottenere ciò, è necessario utilizzare Sockets. Ora se cerchi su Internet troverai molti articoli ed esempi relativi a questo argomento che specificano Android. Ad esempio this e this.

+0

ok Ho effettuato la connessione socket del server client e il server mi ha avvisato se la connessione è stata stabilita, ma come posso fare in modo che il client mi avvisi della connessione? –

0

Probabilmente dovrai scrivere una sorta di programma per il PC che funge da "server" per l'app Android da inviare tramite Socket o Stream.

+0

ok ho eseguito la connessione socket del server client e il server mi ha avvisato se la connessione è stata stabilita, ma come posso fare in modo che il client mi avvisi della connessione? –

1
  1. La parte di comunicazione è piuttosto semplice. Apri un server TCP sul PC e disponi di un client TCP sul dispositivo Android inviandolo stringhe/comandi. È possibile trovare un buon tutorial here, ma sarà necessario modificarlo in base alle proprie esigenze.

    Si noti che quando si lavora con TCP, non dovrebbe essere fatto dal thread principale, ma da un thread in background. Un buon metodo per questo è AsyncTask (quando ci arriverete).

  2. L'altra parte è la simulazione della tastiera. Per questo è necessario utilizzare la classe java.awt.Robot.

+0

Grazie ma ho bisogno anche della stringa da ricevere sul PC il mio PC funzionerà come un server? come potrebbero comunicare l'app per android e l'app per PC? –

+0

Questo è esattamente ciò che i socket TCP sono per. perché entrambi i dispositivi comunichino. – MByD

+0

ok ho eseguito la connessione socket del server client e il server mi ha avvisato se la connessione è stata stabilita, ma come posso fare in modo che il client mi avvisi della connessione? –

1

, sulla base di web s erver design o usi una comunicazione restful o sapone e poi invii i tuoi dati tramite protocollo HTTP al tuo servizio web e ottieni la risposta desiderata da esso. Ho scritto un servizio web asp per l'approccio soap che spiegherò di seguito.

Ecco il codice di esempio Java per lo standard di sapone:

private static String NameSpace = "http://tempuri.org/"; 
    //below url must be your service url, mine is a local one 
    private static String URL = "http://192.168.2.213/hintsservice/service.asmx"; 
    private static String SOAP_ACTION = "http://tempuri.org/"; 

    public static String Invoke(String s) { 
    //respond string from server 
    String resTxt = ""; 
    //the name of your web service method 
    final String webMethName = "Hint"; 
    // Create request 
    SoapObject request = new SoapObject(NameSpace, webMethName); 
    // Property which holds input parameters 
    PropertyInfo PI = new PropertyInfo(); 
    // Set Name 
    PI.setName("s"); 
    // Set Value 
    PI.setValue(s); 
    // Set dataType 
    PI.setType(String.class); 
    // Add the property to request object 
    request.addProperty(PI); 
    // Create envelope 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
      SoapEnvelope.VER11); 
    //Set envelope as dotNet 
    envelope.dotNet = true; 
    // Set output SOAP object 
    envelope.setOutputSoapObject(request); 
    // Create HTTP call object 
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
    try { 
     // Invoke web servi.ce 
     androidHttpTransport.call(SOAP_ACTION + webMethName, envelope); 
     // Get the response 
     SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 
     // Assign it to resTxt variable static variable 
     resTxt = response.toString(); 
    }catch (Exception e) { 
     //Print error 
     e.printStackTrace(); 
     //Assign error message to resTxt 
     resTxt = "Error occured"; 
    } 
    //Return resTxt to calling object 
    return resTxt; 
} 

ora solo bisogno di chiamare questo metodo dall'attività appropriato e lasciate che il vostro servizio web fanno il resto. Qui è il servizio web ad esempio in C# lingua:

[WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService] 

    public class Service : System.Web.Services.WebService 
    { 
     public Service() { 
      //Uncomment the following line if using designed components 
      //InitializeComponent(); 
      [WebMethod] 
      public string Hint(string s) { 
       string response = string.Empty; 
       //todo: produce response 
       return response; 
      } 
     } 
    } 
Problemi correlati