返回列表 發帖

SmartHat(Android)

  1. package ray.test.smarthat;

  2. import android.bluetooth.BluetoothAdapter;
  3. import android.bluetooth.BluetoothDevice;
  4. import android.bluetooth.BluetoothSocket;
  5. import android.content.BroadcastReceiver;
  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.content.IntentFilter;
  9. import android.media.AudioManager;
  10. import android.media.ToneGenerator;
  11. import android.os.Handler;
  12. import android.os.Message;
  13. import android.support.v7.app.AppCompatActivity;
  14. import android.os.Bundle;
  15. import android.view.View;
  16. import android.widget.Button;
  17. import android.widget.TextView;

  18. import java.io.IOException;
  19. import java.io.InputStream;
  20. import java.io.OutputStream;
  21. import java.io.OutputStreamWriter;
  22. import java.util.Set;
  23. import java.util.UUID;

  24. public class MainActivity extends AppCompatActivity {
  25.     //private Button openBT,findBT,connectBT,disconnectBT;
  26.     private TextView status;
  27.     private BluetoothDevice myDevice;
  28.     private BluetoothSocket mySocket;
  29.     private OutputStream myOutputStream;
  30.     private InputStream myInputStream;
  31.     private BluetoothAdapter myBT = BluetoothAdapter.getDefaultAdapter();

  32.     ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 100);

  33.     Handler mHandler = new Handler() {
  34.         @Override    public void handleMessage(Message msg) {
  35.             if(msg.what > 0)
  36.             {
  37.                 if(status != null)
  38.                     status.setText("Got from BT:"+msg.what);
  39.             }
  40.             if(msg.what == 49)
  41.                 toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200);
  42.             if(msg.what == 48)
  43.                 toneG.stopTone();
  44.             super.handleMessage(msg);
  45.         }
  46.     };


  47.     @Override
  48.     protected void onCreate(Bundle savedInstanceState) {
  49.         super.onCreate(savedInstanceState);
  50.         setContentView(R.layout.activity_main);
  51.         status = (TextView)this.findViewById(R.id.status);
  52.     }

  53.     public void openBTClick(View v)
  54.     {
  55.         if(myBT == null)
  56.         {
  57.             status.setText("手機無藍芽設備");
  58.             finish();
  59.             return;
  60.         }

  61.         if(!myBT.enable())
  62.         {
  63.             Intent enable = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
  64.             startActivityForResult(enable, 0);
  65.         }
  66.         Intent scanable = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
  67.         startActivityForResult(scanable, 0x2);
  68.         status.setText("藍芽開啟成功");

  69.     }
  70.     private BroadcastReceiver receiver = new BroadcastReceiver() {
  71.         @Override
  72.         public void onReceive(Context context, Intent intent) {
  73.             String action = intent.getAction();
  74.             if (BluetoothDevice.ACTION_FOUND.equals(action)) {
  75.                 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
  76.                 status.setText(status.getText()+"\n"+device.getName());
  77.             }
  78.         }
  79.     };
  80.     public void findBTClick(View v)
  81.     {
  82.         IntentFilter intentFilter = new IntentFilter();
  83.         intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
  84.         intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
  85.         intentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
  86.         intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
  87.         // 注册广播接收器,接收并处理搜索结果
  88.         registerReceiver(receiver, intentFilter);
  89.         // 寻找蓝牙设备,android会将查找到的设备以广播形式发出去
  90.         myBT.startDiscovery();
  91.     }

  92.     public void connectBTClick(View v)
  93.     {
  94.         Set<BluetoothDevice> pairedDevices = myBT.getBondedDevices();
  95.         if(pairedDevices.size() > 0)
  96.         {
  97.             String s = "";
  98.             for(BluetoothDevice device:pairedDevices)
  99.             {
  100.                 if(device.getName().equals("RAY_Bluetooth"))
  101.                 {
  102.                     myDevice = device;
  103.                     try{
  104.                         openBT();
  105.                     }catch(Exception e){}
  106.                     s = "RAY_BT Connected!";
  107.                     break;
  108.                 }
  109.                 //s += device.getName()+"\t"+device.getAddress()+"\n";
  110.             }
  111.             status.setText(s);
  112.         }
  113.     }

  114.     public void disconnectBTClick(View v)
  115.     {}

  116.     void openBT() throws IOException
  117.     {
  118.         UUID uuid=UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
  119.         mySocket=myDevice.createRfcommSocketToServiceRecord(uuid);
  120.         mySocket.connect();
  121.         //myOutputStream=mySocket.getOutputStream();
  122.         //myInputStream=mySocket.getInputStream();
  123.         new ConnectedThread(mySocket).start();
  124.     }

  125.     private class ConnectedThread extends Thread {
  126.         private final BluetoothSocket mmSocket;
  127.         private final InputStream mmInStream;
  128.         private final OutputStream mmOutStream;

  129.         public ConnectedThread(BluetoothSocket socket) {
  130.             mmSocket = socket;
  131.             InputStream tmpIn = null;
  132.             OutputStream tmpOut = null;

  133.             // Get the input and output streams, using temp objects because
  134.             // member streams are final
  135.             try {
  136.                 tmpIn = socket.getInputStream();
  137.                 tmpOut = socket.getOutputStream();
  138.             } catch (IOException e) { }

  139.             mmInStream = tmpIn;
  140.             mmOutStream = tmpOut;
  141.         }

  142.         public void run() {
  143.             byte[] buffer = new byte[1024];  // buffer store for the stream
  144.             int bytes; // bytes returned from read()

  145.             // Keep listening to the InputStream until an exception occurs
  146.             while (true) {
  147.                 try {
  148.                     // Read from the InputStream
  149.                     bytes = mmInStream.read(buffer);
  150.                     // Send the obtained bytes to the UI Activity
  151.                     mHandler.obtainMessage(buffer[0])
  152.                             .sendToTarget();
  153.                 } catch (IOException e) {
  154.                     break;
  155.                 }
  156.             }
  157.         }

  158.         /* Call this from the main Activity to send data to the remote device */
  159.         public void write(byte[] bytes) {
  160.             try {
  161.                 mmOutStream.write(bytes);
  162.             } catch (IOException e) { }
  163.         }

  164.         /* Call this from the main Activity to shutdown the connection */
  165.         public void cancel() {
  166.             try {
  167.                 mmSocket.close();
  168.             } catch (IOException e) { }
  169.         }
  170.     }
  171. }
複製代碼

返回列表