2017-06-18 80 views
1

我正在使用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上使用工作室停止按鈕完全停止應用程序,服務器收到來自客戶端的消息。 此代碼適用於發送消息,因爲此代碼適用於我的主應用程序,但僅當後臺服務使用它時纔會出現問題。

這是我的服務器代碼(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

嘗試創建一個separete服務類和數據發送到它。不要忘記喚醒設備。

我的意思是,使用startService()代替new Thread...

使用new Thread...進入一個新的。

+0

第一塊代碼是NotificationListenerService中的一個方法。所以你的意思是我應該創建一個新的服務,僅用於與服務器的通信? –

+0

@EldarAzulay,是 – Vyacheslav

+0

與新服務相同的問題。我正在使用與上面完全相同的代碼,我只是將它寫在'onStart()'方法中。 –

相關問題