package com.example.airdrumsnew; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Set; import java.util.UUID; import android.annotation.SuppressLint; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.graphics.Color; import android.graphics.Typeface; import android.graphics.drawable.ColorDrawable; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.SoundPool; import android.os.Bundle; import android.os.Handler; import android.text.Spannable; import android.text.SpannableString; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; public class BluetoothTest extends Activity { TextView myLabel,tvBass,tvHiHat,tvSnare,tvTomMid,tvRide,tvCrash; ImageView ivBass,ivHiHat,ivSnare,ivTomMid,ivRide,ivCrash; EditText myTextbox; BluetoothAdapter mBluetoothAdapter; BluetoothSocket mmSocket; BluetoothDevice mmDevice; OutputStream mmOutputStream; InputStream mmInputStream; //Extract the data Thread workerThread; Button openButton,sendButton,closeButton; Button btCalibrate; byte[] readBuffer; int readBufferPosition; int counter,n=0; volatile boolean stopWorker; char charHiHat='a'; char charBass = 'b'; char charTomMid = 'q'; char charCrash = 'w'; char charSnare = 'r'; char charRide = 'e'; Typeface font; MediaPlayer mpBass,mpHiHat,mpTomMid,mpCrash,mpSnare,mpRide; @SuppressLint("NewApi") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //Extract the data� openButton = (Button)findViewById(R.id.open); closeButton = (Button)findViewById(R.id.close); btCalibrate =(Button)findViewById(R.id.btCalibrate); myLabel = (TextView)findViewById(R.id.label); font = Typeface.createFromAsset(getAssets(), "Roboto-Thin.ttf"); android.app.ActionBar bar = this.getActionBar(); ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#5677fc")); bar.setBackgroundDrawable(colorDrawable); SpannableString s = new SpannableString("Let's Play!"); s.setSpan(new TypefaceSpan(this, "Roboto-Thin.ttf"), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tvBass = (TextView)findViewById(R.id.tvBass); tvBass.setTypeface(font); tvHiHat = (TextView)findViewById(R.id.tvHiHat); tvHiHat.setTypeface(font); tvSnare = (TextView)findViewById(R.id.tvSnare); tvSnare.setTypeface(font); tvTomMid = (TextView)findViewById(R.id.tvTomMid); tvTomMid.setTypeface(font); tvCrash = (TextView)findViewById(R.id.tvCrash); tvCrash.setTypeface(font); tvRide = (TextView)findViewById(R.id.tvRide); tvRide.setTypeface(font); ivBass = (ImageView)findViewById(R.id.ivBass); ivHiHat = (ImageView)findViewById(R.id.ivHiHat); ivSnare = (ImageView)findViewById(R.id.ivSnare); ivTomMid = (ImageView)findViewById(R.id.ivTomMid); ivCrash = (ImageView)findViewById(R.id.ivCrash); ivRide = (ImageView)findViewById(R.id.ivRide); mpBass = MediaPlayer.create(this, R.raw.bass); mpHiHat = MediaPlayer.create(this, R.raw.hihatopenclose); mpTomMid = MediaPlayer.create(this, R.raw.tommid); mpCrash = MediaPlayer.create(this, R.raw.crash); mpSnare = MediaPlayer.create(this, R.raw.snare); mpRide = MediaPlayer.create(this, R.raw.ride); tvSnare.setVisibility(View.GONE); ivSnare.setVisibility(View.GONE); tvCrash.setVisibility(View.GONE); ivCrash.setVisibility(View.GONE); tvRide.setVisibility(View.GONE); ivRide.setVisibility(View.GONE); //Open Button openButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { try { findBT(); openBT(); } catch (IOException ex) { } } }); //Close button closeButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { try { closeBT(); } catch (IOException ex) { } } }); btCalibrate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { sendData('c'); } catch (IOException e) { e.printStackTrace(); } } }); } void findBT() { mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if(mBluetoothAdapter == null) { myLabel.setText("No bluetooth adapter available"); } if(!mBluetoothAdapter.isEnabled()) { Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBluetooth, 0); } Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); if(pairedDevices.size() > 0) { for(BluetoothDevice device : pairedDevices) { if(device.getName().equals("HC-05")) { mmDevice = device; break; } } } myLabel.setText("Bluetooth Device Found"); } void openBT() throws IOException { UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); //Standard SerialPortService ID mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid); mmSocket.connect(); mmOutputStream = mmSocket.getOutputStream(); mmInputStream = mmSocket.getInputStream(); beginListenForData(); myLabel.setText("Bluetooth Opened"); } void beginListenForData() { final Handler handler = new Handler(); final byte delimiter = 10; //This is the ASCII code for a newline character stopWorker = false; readBufferPosition = 0; readBuffer = new byte[1024]; workerThread = new Thread(new Runnable() { public void run() { while(!Thread.currentThread().isInterrupted() && !stopWorker) { try { int bytesAvailable = mmInputStream.available(); if(bytesAvailable > 0) { byte[] packetBytes = new byte[bytesAvailable]; mmInputStream.read(packetBytes); for(int i=0;i<bytesAvailable;i++) { byte b = packetBytes[i]; if(b == delimiter) { byte[] encodedBytes = new byte[readBufferPosition]; System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length); final String data = new String(encodedBytes, "US-ASCII"); readBufferPosition = 0; handler.post(new Runnable() { public void run() { myLabel.setText(data); System.out.println(""+data.length()); char c = data.charAt(0); switch (c) { case 'a':System.out.println(c); mpHiHat.start(); tvHiHat.setTextColor(Color.YELLOW); tvBass.setTextColor(Color.WHITE); tvCrash.setTextColor(Color.WHITE); tvRide.setTextColor(Color.WHITE); tvSnare.setTextColor(Color.WHITE); tvTomMid.setTextColor(Color.WHITE); mpHiHat.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub tvHiHat.setTextColor(Color.WHITE); } }); break; case 'b': System.out.println(c); mpBass.start(); tvBass.setTextColor(Color.YELLOW); tvHiHat.setTextColor(Color.WHITE); tvCrash.setTextColor(Color.WHITE); tvRide.setTextColor(Color.WHITE); tvSnare.setTextColor(Color.WHITE); tvTomMid.setTextColor(Color.WHITE); mpBass.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub tvBass.setTextColor(Color.WHITE); } }); break; case 'q': System.out.println(c); mpTomMid.start(); tvTomMid.setTextColor(Color.YELLOW); tvBass.setTextColor(Color.WHITE); tvCrash.setTextColor(Color.WHITE); tvRide.setTextColor(Color.WHITE); tvSnare.setTextColor(Color.WHITE); tvHiHat.setTextColor(Color.WHITE); mpTomMid.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub tvTomMid.setTextColor(Color.WHITE); } }); break; } } }); } else { readBuffer[readBufferPosition++] = b; } } } } catch (IOException ex) { stopWorker = true; } } } }); workerThread.start(); } void sendData(Character msg) throws IOException { mmOutputStream.write(msg); myLabel.setText("Data Sent"); } void closeBT() throws IOException { stopWorker = true; mmOutputStream.close(); mmInputStream.close(); mmSocket.close(); myLabel.setText("Bluetooth Closed"); } }