web-dev-qa-db-fra.com

comment envoyer une chaîne d'Android à un PC via wifi

Bonjour, je travaille sur une application Android qui nécessite l'envoi d'une chaîne via un réseau wifi au PC, ce qui simule la frappe au clavier. Vous avez des idées sur la manière de réaliser cette tâche?

8
Hasham Tahir

Vous devez écrire un programme serveur sur le PC et utiliser ServerSocket pour accepter une connexion et écrire un fil pour votre téléphone Android utilisant un socket standard (avec le même port que le PC), puis les gérer à l'aide de DataInputStream. DataOutputStream. Vous devez également ouvrir des autorisations sur votre AndroidManifest.xml.

Pour les autorisations, utilisez ceci:

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

Pour le code, voici un petit exemple:

Serveur:

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();

Client:

Socket socket = new Socket("192.168.0.1",1755);
DataOutputStream DOS = new DataOutputStream(socket.getOutputStream());
DOS.writeUTF("HELLO_WORLD");
socket.close();
29
Moises Jimenez
  1. La partie communication est plutôt facile. Ouvrez un serveur TCP sur le PC et disposez d'un client TCP sur le périphérique Android lui envoyant des chaînes/commandes. Vous trouverez un tutoriel de Nice ici , mais vous devrez le modifier pour répondre à vos besoins.

    Notez que lorsque vous travaillez avec TCP, cela ne doit pas être fait à partir du thread principal, mais à partir d'un thread en arrière-plan. Une bonne méthode pour cela est AsyncTask (Quand vous y arriverez).

  2. L'autre partie est la simulation du clavier. Pour cela, vous devez utiliser le fichier Java.awt.Robot class.

1
MByD

en fonction de la conception de votre serveur Web, vous utilisez soit une communication reposante, soit du savon, puis vous envoyez vos données via le protocole HTTP à votre service Web pour obtenir la réponse souhaitée. J'ai écrit un service Web asp pour approche savon que je vais expliquer ci-dessous.

Voici l'exemple de code Java pour soap standard:

    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;
}

maintenant, il vous suffit d'appeler cette méthode à partir de l'activité appropriée et de laisser votre service Web faire le reste. Voici l'exemple de service Web en langage C #:

    [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;
            }
       }
   }
1
AmiNadimi

Je ne peux pas vous proposer le code complet, mais au moins je peux vous guider dans la bonne direction. Pour ce faire, vous devez utiliser Sockets . Désormais, si vous effectuez une recherche sur Internet, vous trouverez de nombreux articles et exemples relatifs à ce sujet en spécifiant Android. Par exemple this et this .

0
waqaslam

Vous devrez probablement écrire pour le PC une sorte de programme qui servira de «serveur» à l'application Android à envoyer via un Socket ou un Stream.

0
Justin Pearce