Android Open Source - bluetooth blue Tooth Demo






From Project

Back to project page bluetooth.

License

The source code is released under:

Apache License

If you think the Android project bluetooth listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package edu.cs4730.btDemo;
//from w w  w.  j a  va2 s .  c o m
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Set;
import java.util.UUID;

import android.app.Activity;
import android.app.AlertDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;

public class blueToothDemo extends Activity implements Button.OnClickListener {
  BluetoothAdapter mBluetoothAdapter =null;
  BluetoothDevice device;
  private static final int REQUEST_ENABLE_BT = 2;  
  private static final UUID MY_UUID = UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");
  private static final String NAME = "BluetoothDemo";
  BluetoothDevice remoteDevice;
  TextView output;
  Button btnServer, btnScan, btnClient;
  
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        output = (TextView) findViewById(R.id.output);
        output.append("\n");
        btnServer = (Button) findViewById(R.id.btnServer);
        btnServer.setOnClickListener(this);
        btnClient = (Button) findViewById(R.id.btnClient);
        btnClient.setOnClickListener(this);
        btnScan = (Button) findViewById(R.id.btnScan);
        btnScan.setOnClickListener(this);
      startbt();
    }
  @Override
  public void onClick(View v) {
    if ( (Button)v == btnServer) {
      startServer();
    } else if ( (Button)v == btnClient) {
      if (device != null) {
        output.append("button client\n");
        startClient();
      }
    } else if ( (Button)v == btnScan) {
      output.append("Started query\n");
      querypaired();
    }

  }
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
          output.append(msg.getData().getString("msg"));
        }

    };
    public void mkmsg(String str) {
    //handler junk, because thread can't update screen!
    Message msg = new Message();
    Bundle b = new Bundle();
    b.putString("msg", str);
    msg.setData(b);
      handler.sendMessage(msg);
    }
    
    
    public boolean startbt() {
      mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
      if (mBluetoothAdapter == null) {
          // Device does not support Bluetooth
        return false;
      }
      //make sure bluetooth is enabled.
       if (!mBluetoothAdapter.isEnabled()) {
           Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
           startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
       }
       return true;
    }
    
    
    
    public void querypaired() {
      Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
      // If there are paired devices
      if (pairedDevices.size() > 0) {
          // Loop through paired devices
        output.append("at least 1 paired device\n");
        final BluetoothDevice blueDev[] = new BluetoothDevice[pairedDevices.size()];
        String[] items = new String[blueDev.length];
        int i =0;
        for (BluetoothDevice devicel : pairedDevices) {
          blueDev[i] = devicel;
            items[i] = blueDev[i].getName() + ": " + blueDev[i].getAddress();
            output.append("Device: "+items[i]+"\n");
            //mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
            i++;
          }
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Choose Bluetooth:");
        builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
            dialog.dismiss();
            if (item >= 0 && item <blueDev.length) { 
              device = blueDev[item];
            }

            }
        });
        AlertDialog alert = builder.create();
        alert.show();
      }
    }
    public void startServer() {
      new Thread(new AcceptThread()).start();
      
    }
    public void startClient() {
      if (device != null) {     
        new Thread(new ConnectThread(device)).start();
      }
    }
    
    /**
     * This thread runs while listening for incoming connections. It behaves
     * like a server-side client. It runs until a connection is accepted
     * (or until cancelled).
     */
    private class AcceptThread extends Thread {
        // The local server socket
        private final BluetoothServerSocket mmServerSocket;

        public AcceptThread() {
            BluetoothServerSocket tmp = null;
            // Create a new listening server socket
            try {
                tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);
            } catch (IOException e) {
                mkmsg("Failed to start server\n");
            }
            mmServerSocket = tmp;
        }
        public void run() {
          mkmsg("waiting on accept");
          BluetoothSocket socket = null;
          try {
            // This is a blocking call and will only return on a
            // successful connection or an exception
            socket = mmServerSocket.accept();
          } catch (IOException e) {
            mkmsg("Failed to accept\n");
          }

          // If a connection was accepted
          if (socket != null) {
            mkmsg("Connection made\n");
            mkmsg("Remote device address: "+socket.getRemoteDevice().getAddress().toString()+"\n");
            //Note this is copied from the TCPdemo code.
            try {
              mkmsg("Attempting to receive a message ...\n"); 
              BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
              String str = in.readLine();
              mkmsg("received a message:\n" + str+"\n");

              PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
              mkmsg("Attempting to send message ...\n");                 
              out.println("Reponse from Bluetooth Demo Server");
              out.flush();
              mkmsg("Message sent...\n");

              mkmsg("We are done, closing connection\n");
            } catch(Exception e) {
              mkmsg("Error happened sending/receiving\n");

            } finally {
              try {
            socket.close();
          } catch (IOException e) {
            mkmsg("Unable to close socket"+e.getMessage()+"\n");
          }
            }
          } else {
            mkmsg("Made connection, but socket is null\n");
          }
          mkmsg("Server ending \n");
        }

        public void cancel() {
          try {
            mmServerSocket.close();
          } catch (IOException e) {

          }
        }
    }
    /**
     * This thread runs while attempting to make an outgoing connection
     * with a device. It runs straight through; the connection either
     * succeeds or fails.
     */
    private class ConnectThread extends Thread {
        private BluetoothSocket socket;
        private final BluetoothDevice mmDevice;

        public ConnectThread(BluetoothDevice device) {
            mmDevice = device;
            BluetoothSocket tmp = null;

            // Get a BluetoothSocket for a connection with the
            // given BluetoothDevice
            try {
                tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
            } catch (IOException e) {
                mkmsg("Client connection failed: "+e.getMessage().toString()+"\n");
            }
            socket = tmp;
 
        }

        public void run() {
            mkmsg("Client running\n");
            // Always cancel discovery because it will slow down a connection
            mBluetoothAdapter.cancelDiscovery();

            // Make a connection to the BluetoothSocket
            try {
                // This is a blocking call and will only return on a
                // successful connection or an exception
                socket.connect();
            } catch (IOException e) {
              mkmsg("Connect failed\n");
                try {
                    socket.close();
                    socket = null;
                } catch (IOException e2) {
                    mkmsg("unable to close() socket during connection failure: "+e2.getMessage().toString()+"\n");
                    socket = null;
                }
                // Start the service over to restart listening mode   
            }
             // If a connection was accepted
          if (socket != null) {
            mkmsg("Connection made\n");
            mkmsg("Remote device address: "+socket.getRemoteDevice().getAddress().toString()+"\n");
            //Note this is copied from the TCPdemo code.
            try {
              PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
              mkmsg("Attempting to send message ...\n");                 
              out.println("hello from Bluetooth Demo Client");
              out.flush();
              mkmsg("Message sent...\n");
              
              mkmsg("Attempting to receive a message ...\n"); 
              BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
              String str = in.readLine();
              mkmsg("received a message:\n" + str+"\n");
              mkmsg("We are done, closing connection\n");
            } catch(Exception e) {
              mkmsg("Error happened sending/receiving\n");

            } finally {
              try {
            socket.close();
          } catch (IOException e) {
            mkmsg("Unable to close socket"+e.getMessage()+"\n");
          }
            }
          } else {
            mkmsg("Made connection, but socket is null\n");
          }
          mkmsg("Client ending \n");

        }

        public void cancel() {
            try {
                socket.close();
            } catch (IOException e) {
               mkmsg( "close() of connect socket failed: "+e.getMessage().toString()+"\n");
            }
        }
    }

}




Java Source Code List

edu.cs4730.btDemo.Client_Fragment.java
edu.cs4730.btDemo.Client_Fragment.java
edu.cs4730.btDemo.Help_Fragment.java
edu.cs4730.btDemo.Help_Fragment.java
edu.cs4730.btDemo.MainActivity.java
edu.cs4730.btDemo.MainActivity.java
edu.cs4730.btDemo.Server_Fragment.java
edu.cs4730.btDemo.Server_Fragment.java
edu.cs4730.btDemo.blueToothDemo.java
edu.cs4730.btDemo.blueToothDemo.java