我正在使用NotificationListenerService
,我希望在调用onNotificationPosted()
时将数据发送到远程套接字。
但我有一个问题,即套接字已连接,但是当我使用BufferedWriter
或任何其他输出类编写内容时,它永远不会将其发送到远程套接字,直到我关闭应用程序和android studio的服务。
这是我发送数据的代码:
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();
只有在我使用android studio上的停止按钮完全停止应用程序后,服务器才会从客户端获取消息。 此代码适用于发送邮件,因为此代码可以从主应用程序中为我工作,但只有在后台服务使用它时才会出现问题。
这是我的服务器代码(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);
}
}
答案 0 :(得分:0)
尝试创建一个separete服务类并将数据发送到其中。不要忘记唤醒设备。
我的意思是,使用startService()
代替new Thread...
将new Thread...
用于新的。