NotificationListenerService
を使用していて、onNotificationPosted()
が呼び出されたときにリモートソケットにデータを送信したいとします。 しかし、ソケットが接続されているという問題がありますが、BufferedWriter
またはその他の出力クラスを使用して何かを書くと、アプリケーションとAndroidスタジオでサービスをシャットダウンするまで、決してリモートソケットに送信されません。 これは、データを送信するための私のコードです:私は完全にアンドロイドスタジオに停止ボタンを使用して、アプリケーションを停止した後にのみサービスからリモートソケットにデータを送信する際の問題
new Thread(new Runnable() {
@Override
public void run() {
try {
// DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
// outputStream.writeUTF(send_counter + " $title: " + title + " $mes: " + mes);
Log.d(TAG, "started sending info");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write(send_counter + " $title: " + title + " $mes: " + mes);
bw.newLine();
bw.flush();
// bw.close();
// outputStream.writeInt(icon.length);
// outputStream.write(icon);
Log.d(TAG, "info sent");
// outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
、サーバはクライアントからのメッセージを取得します。 このコードは主なアプリケーションから私のために働いたのでメッセージを送信するためには問題ありませんが、バックグラウンドサービスがそれを使用する場合にのみ問題を引き起こします。
これは私のサーバーコード(C#の)です:
TcpClient client = server.AcceptTcpClient();
NetworkStream nwStream = client.GetStream();
PostToConsole("Phone has connected from: " + ((IPEndPoint)client.Client.RemoteEndPoint).Address + ":" + ((IPEndPoint)client.Client.RemoteEndPoint).Port);
byte[] buffer = new byte[client.ReceiveBufferSize];
int res = nwStream.Read(buffer, 0, client.ReceiveBufferSize);
while (res > 0)
{
string data = Encoding.UTF8.GetString(buffer, 0, res);
PostToConsole(data + ((IPEndPoint)client.Client.RemoteEndPoint).Address);
buffer = new byte[client.ReceiveBufferSize];
res = nwStream.Read(buffer, 0, client.ReceiveBufferSize);
}
}
コードの最初のチャンクは、NotificationListenerService内のメソッドです。つまり、サーバーとの通信のためだけに新しいサービスを作成する必要がありますか? –
@ EldarAzulay、yes – Vyacheslav
新しいサービスで同じ問題が再び発生します。上記のコードと全く同じコードを使用していますが、私は 'onStart()'メソッドでそれを書きました。 –