Senden Sie Text über Bluetooth von Java Server zu Android Client

Zuerst … nicht umleiten mich zu Bluetooth Chat und ich habe es vollständig gelesen.

Ich habe einen Android-Client, der die Verbindung ordnungsgemäß mit dem Server herstellt und was ich am meisten kann ich Text an den Server in meinem PC senden und es richtig zeigen, aber ich kann nicht die entgegengesetzte Aktion, senden Sie eine einfache Zeichenfolge aus dem Server zu Der Klient und zeige es in meiner Android-App.

  • Android GCM SENDER_ID, wie bekomme ich es?
  • Ist es möglich, den Zugriff auf das Fragment-Layout (Ansichten) von der übergeordneten Aktivität zu deaktivieren?
  • Android sdk Aufforderung Toast Nachricht in Konto-Einstellungen
  • Kill eine andere Anwendung auf Android?
  • ViewPager in Fragment mit Ränder und Seiten-Transformator nicht korrekt wiedergeben
  • Timer im Hintergrund
  • Ich möchte nicht einen Chat implementieren ist nur zu zeigen, wie BT Kommunikation zwischen einem Java Server und Android Client funktioniert.

    Um es einfach zu machen:

    Ich sende den Text am Ende der startServer () – Methode in der Serverklasse.

    Ich versuche, den Text vom Server zu Beginn von onPause () zu lesen.

    **

    [Gelöst] Lösung unten

    **

    Der Code lautet wie folgt:

    Android BT Client:

    /*...libraries here...*/ public class ConnectTest extends Activity { TextView out; private static final int REQUEST_ENABLE_BT = 1; private BluetoothAdapter btAdapter = null; private BluetoothSocket btSocket = null; private OutputStream outStream = null; // Well known SPP UUID private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); // Insert your server's MAC address private static String address = "00:10:60:AA:B9:B2"; /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); out = (TextView) findViewById(R.id.out); out.append("\n...In onCreate()..."); btAdapter = BluetoothAdapter.getDefaultAdapter(); CheckBTState(); } public void onStart() { super.onStart(); out.append("\n...In onStart()..."); } public void onResume() { super.onResume(); out.append("\n...In onResume...\n...Attempting client connect..."); // Set up a pointer to the remote node using it's address. BluetoothDevice device = btAdapter.getRemoteDevice(address); // Two things are needed to make a connection: // A MAC address, which we got above. // A Service ID or UUID. In this case we are using the // UUID for SPP. try { btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); } catch (IOException e) { AlertBox("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + "."); } // Discovery is resource intensive. Make sure it isn't going on // when you attempt to connect and pass your message. btAdapter.cancelDiscovery(); // Establish the connection. This will block until it connects. try { btSocket.connect(); out.append("\n...Connection established and data link opened..."); } catch (IOException e) { try { btSocket.close(); } catch (IOException e2) { AlertBox("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + "."); } } // Create a data stream so we can talk to server. out.append("\n...Sending message to server..."); String message = "Hello from Android.\n"; out.append("\n\n...The message that we will send to the server is: "+message); try { outStream = btSocket.getOutputStream(); } catch (IOException e) { AlertBox("Fatal Error", "In onResume() and output stream creation failed:" + e.getMessage() + "."); } byte[] msgBuffer = message.getBytes(); try { outStream.write(msgBuffer); } catch (IOException e) { String msg = "In onResume() and an exception occurred during write: " + e.getMessage(); if (address.equals("00:00:00:00:00:00")) msg = msg + ".\n\nUpdate your server address from 00:00:00:00:00:00 to the correct address on line 37 in the java code"; msg = msg + ".\n\nCheck that the SPP UUID: " + MY_UUID.toString() + " exists on server.\n\n"; AlertBox("Fatal Error", msg); } } public void onPause() { super.onPause(); //out.append("\n...Hello\n"); InputStream inStream; try { inStream = btSocket.getInputStream(); BufferedReader bReader=new BufferedReader(new InputStreamReader(inStream)); String lineRead=bReader.readLine(); out.append("\n..."+lineRead+"\n"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } out.append("\n...In onPause()..."); if (outStream != null) { try { outStream.flush(); } catch (IOException e) { AlertBox("Fatal Error", "In onPause() and failed to flush output stream: " + e.getMessage() + "."); } } try { btSocket.close(); } catch (IOException e2) { AlertBox("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + "."); } } public void onStop() { super.onStop(); out.append("\n...In onStop()..."); } public void onDestroy() { super.onDestroy(); out.append("\n...In onDestroy()..."); } private void CheckBTState() { // Check for Bluetooth support and then check to make sure it is turned on // Emulator doesn't support Bluetooth and will return null if(btAdapter==null) { AlertBox("Fatal Error", "Bluetooth Not supported. Aborting."); } else { if (btAdapter.isEnabled()) { out.append("\n...Bluetooth is enabled..."); } else { //Prompt user to turn on Bluetooth Intent enableBtIntent = new Intent(btAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } } } public void AlertBox( String title, String message ){ new AlertDialog.Builder(this) .setTitle( title ) .setMessage( message + " Press OK to exit." ) .setPositiveButton("OK", new OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { finish(); } }).show(); } } 

    Und der Java BT Server:

      import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import javax.bluetooth.*; import javax.microedition.io.*; /** * Class that implements an SPP Server which accepts single line of * message from an SPP client and sends a single line of response to the client. */ public class SimpleSPPServer { //start server private void startServer() throws IOException{ //Create a UUID for SPP UUID uuid = new UUID("1101", true); //Create the servicve url String connectionString = "btspp://localhost:" + uuid +";name=Sample SPP Server"; //open server url StreamConnectionNotifier streamConnNotifier = (StreamConnectionNotifier)Connector.open( connectionString ); //Wait for client connection System.out.println("\nServer Started. Waiting for clients to connect..."); StreamConnection connection=streamConnNotifier.acceptAndOpen(); RemoteDevice dev = RemoteDevice.getRemoteDevice(connection); System.out.println("Remote device address: "+dev.getBluetoothAddress()); System.out.println("Remote device name: "+dev.getFriendlyName(true)); //read string from spp client InputStream inStream=connection.openInputStream(); BufferedReader bReader=new BufferedReader(new InputStreamReader(inStream)); String lineRead=bReader.readLine(); System.out.println(lineRead); //send response to spp client OutputStream outStream=connection.openOutputStream(); BufferedWriter bWriter=new BufferedWriter(new OutputStreamWriter(outStream)); bWriter.write("Response String from SPP Server\r\n"); /*PrintWriter pWriter=new PrintWriter(new OutputStreamWriter(outStream)); pWriter.write("Response String from SPP Server\r\n"); pWriter.flush(); pWriter.close();*/ streamConnNotifier.close(); } public static void main(String[] args) throws IOException { //display local device address and name LocalDevice localDevice = LocalDevice.getLocalDevice(); System.out.println("Address: "+localDevice.getBluetoothAddress()); System.out.println("Name: "+localDevice.getFriendlyName()); SimpleSPPServer sampleSPPServer=new SimpleSPPServer(); sampleSPPServer.startServer(); } } 

    Lösung : Es ist nur eine kleine Änderung in der Serverseite. Ich weiß nicht, warum, aber anstatt mit PufferedWrite in den Sockel zu schreiben, müssen wir PrinterWriter verwenden, um dies zu tun. Ich füge dieses Stück Code hinzu:

    BT Server:

      .... //read string from spp client InputStream inStream=connection.openInputStream(); BufferedReader bReader=new BufferedReader(new InputStreamReader(inStream)); String lineRead=bReader.readLine(); System.out.println(lineRead); //send response to spp client OutputStream outStream=connection.openOutputStream(); PrintWriter pWriter=new PrintWriter(new OutputStreamWriter(outStream)); pWriter.write("Response String from SPP Server\r\n"); pWriter.flush(); pWriter.close(); streamConnNotifier.close(); ... 

  • Picasso-Ernte zu einer Ansicht
  • Wie zu erkennen, ob das Dropdown-Menü oben oder unter dem Spinner in android angezeigt wird?
  • Fehler beim Crunch-Datei - Android Studio (App: MergeDebugResources)
  • Überprüfen Sie, ob die App im Android Market verfügbar ist
  • Android: app: transformClassesWithJarMergingForDebug FAILED - ZipException: doppelter Eintrag
  • Warum listview.setAdapter (_adapter) zweimal abstürzt app?
  • One Solution collect form web for “Senden Sie Text über Bluetooth von Java Server zu Android Client”

    Es sieht so aus, als ob dein Pufferpuffer Cache nicht gespült wurde, die Daten blieben einfach im Puffer, ohne gesendet zu werden. bWriter.flush() Sie bWriter.write() bWriter.flush() nachdem Ihr bWriter.write() das Problem beheben und die Daten in den Ausgabestream bWriter.write() sollen. Sie können auch erwägen, Ihren Code zu ändern, um dies zu folgen:

     PrintWriter pWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outStream))); 

    Dadurch wird die PrintWriter-Ausgabe gepuffert, anstatt sofort in den Ausgabestrom geschrieben zu werden, was ineffizient sein kann.

    Für deinen Zweck aber, das Auslassen des BufferedWriters sollte gut sein, da du höchstwahrscheinlich einen sofortigen Flush zum Ausgabestream wünschst (welches PrintWriter tut).

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.