11

こんにちは、wifi 経由で文字列を PC に送信する必要がある Android アプリに取り組んでいます。その結果、キーボードのキープレスがシミュレートされます。このタスクを達成する方法はありますか?

4

6 に答える 6

29

PC でサーバー プログラムを作成し、ServerSocket を使用して接続を受け入れ、通常のソケット (PC 側と同じポート) を使用する Android スマートフォン用のスレッドを作成し、DataInputStream を使用してそれらを管理する必要があります。データ出力ストリーム。また、AndroidManifest.xml でアクセス許可を開く必要があります。

アクセス許可については、これを使用します。

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

コードの例を次に示します。

サーバ:

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

クライアント:

Socket socket = new Socket("192.168.0.1",1755);
DataOutputStream DOS = new DataOutputStream(socket.getOutputStream());
DOS.writeUTF("HELLO_WORLD");
socket.close();
于 2012-04-30T18:54:31.670 に答える
2
  1. コミュニケーションの部分はかなり簡単です。PC で TCP サーバーを開き、Android デバイスで TCP クライアントに文字列/コマンドを送信させます。すばらしいチュートリアルがここにありますが、必要に応じて変更する必要があります。

    TCP を使用する場合は、メイン スレッドからではなく、バックグラウンド スレッドから実行する必要があることに注意してください。そのための良い方法はAsyncTask (いつそこに着くか) です。

  2. もう 1 つの部分は、キーボード シミュレーションです。そのためには、java.awt.Robotクラスを使用する必要があります。

于 2012-04-30T17:59:32.913 に答える
1

Web サーバーの設計に基づいて、安静な通信または SOAP を使用し、HTTP プロトコルを介してデータを Web サービスに送信し、そこから目的の応答を取得します。以下で説明する SOAP アプローチ用の ASP Web サービスを作成しました。

SOAP 標準の Java サンプル コードを次に示します。

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

あとは、適切なアクティビティからこのメソッドを呼び出して、あとは Web サービスに任せるだけです。C# 言語の Web サービスの例を次に示します。

    [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;
            }
       }
   }
于 2016-02-28T06:50:31.423 に答える
0

完全なコードを提供することはできませんが、少なくとも正しい方向に導くことはできます。これを実現するには、Socketsを使用する必要があります。インターネットで検索すると、Android を指定したこの主題に関連する多くの記事や例が見つかります。たとえば、これこれ

于 2012-04-30T17:57:29.963 に答える
0

おそらく、Android アプリがソケットまたはストリーム経由で送信するための「サーバー」として機能する PC 用の何らかのプログラムを作成する必要があります。

于 2012-04-30T17:58:34.723 に答える
0

多くのコミュニティがいる実用的で簡単な方法は、RabbitMQ を使用することです。プロジェクトに使用し、文字列を送信します https://www.rabbitmq.com/getstarted.html

基本を学べば、プロジェクトをより多くのものに拡張できるようになります。原則として、文字列の送受信はチュートリアル 1 で十分です。

サーバーのインストール手順に従い、要求されたポートを開くか、docker を使用します。

android-server で RabbitMQ の詳細が必要な場合は、私に尋ねてください。

于 2021-11-22T14:43:53.557 に答える