こんにちはAndroidアプリに取り組んでいます。これは、wifi経由で文字列をPCに送信する必要があるため、キーボードのキープレスをシミュレートします。このタスクを実行する方法はありますか?
PCでサーバープログラムを作成し、ServerSocketを使用して、接続を受け入れ、Android電話(PCと同じポートを持つ)を使用する電話)のスレッドを書き込む必要があります。 end)次に、DataInputStreamとDataOutputStreamを使用してそれらを管理します。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();
通信部分はかなり簡単です。 PCでTCPサーバーを開き、TCPクライアントでAndroidデバイスに文字列/コマンドを送信します。素敵なチュートリアルが見つかるかもしれません here が必要に応じて変更する必要があります。
TCPを使用する場合は、メインスレッドからではなく、バックグラウンドスレッドから実行する必要があることに注意してください。そのための良い方法は AsyncTask (そこに着くとき)です。
他の部分はキーボードシミュレーションです。そのためには、 Java.awt.Robot クラスを使用する必要があります。
webサーバーの設計に基づいて、安静な通信または石鹸を使用してから、HTTPプロトコルを介してWebサービスにデータを送信し、Webサービスから必要な答えを得ます。以下で説明する石鹸アプローチ用のasp Webサービスを作成しました。
以下は、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;
}
}
}
Androidアプリがソケットまたはストリームを介して送信するための「サーバー」として機能する、PC向けの何らかのプログラムを作成する必要があるでしょう。