appa
tBlue.java
// tBlue.java - simple wrapper for Android Bluetooth libraries
// (c) Tero Karvinen & Kimmo Karvinen http://terokarvinen.com/tblue
package fi.sulautetut.android.tblueclient;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.util.Log;
public class TBlue {
String address=null;
String TAG="tBlue";
BluetoothAdapter localAdapter=null;
BluetoothDevice remoteDevice=null;
BluetoothSocket socket=null;
public OutputStream outStream = null;
public InputStream inStream=null;
boolean failed=false;
public TBlue(String address)
{
this.address=address.toUpperCase();
localAdapter = BluetoothAdapter.getDefaultAdapter();
if ((localAdapter!=null) && localAdapter.isEnabled()) {
Log.i(TAG, "Bluetooth adapter found and enabled on phone. ");
} else {
Log.e(TAG, "Bluetooth adapter NOT FOUND or NOT ENABLED!");
return;
}
connect();
}
public void connect()
{
Log.i(TAG, "Bluetooth connecting to "+address+"...");
try {
remoteDevice = localAdapter.getRemoteDevice(address);
} catch (IllegalArgumentException e) {
Log.e(TAG, "Failed to get remote device with MAC address."
+"Wrong format? MAC address must be upper case. ",
e);
return;
}
Log.i(TAG, "Creating RFCOMM socket...");
try {
Method m = remoteDevice.getClass().getMethod
("createRfcommSocket", new Class[] { int.class });
socket = (BluetoothSocket) m.invoke(remoteDevice, 1);
Log.i(TAG, "RFCOMM socket created.");
} catch (NoSuchMethodException e) {
Log.i(TAG, "Could not invoke createRfcommSocket.");
e.printStackTrace();
} catch (IllegalArgumentException e) {
Log.i(TAG, "Bad argument with createRfcommSocket.");
e.printStackTrace();
} catch (IllegalAccessException e) {
Log.i(TAG, "Illegal access with createRfcommSocket.");
e.printStackTrace();
} catch (InvocationTargetException e) {
Log.i(TAG, "Invocation target exception: createRfcommSocket.");
e.printStackTrace();
}
Log.i(TAG, "Got socket for device "+socket.getRemoteDevice());
localAdapter.cancelDiscovery();
Log.i(TAG, "Connecting socket...");
try {
socket.connect();
Log.i(TAG, "Socket connected.");
} catch (IOException e) {
try {
Log.e(TAG, "Failed to connect socket. ", e);
socket.close();
Log.e(TAG, "Socket closed because of an error. ", e);
} catch (IOException eb) {
Log.e(TAG, "Also failed to close socket. ", eb);
}
return;
}
try {
outStream = socket.getOutputStream();
Log.i(TAG, "Output stream open.");
inStream = socket.getInputStream();
Log.i(TAG, "Input stream open.");
} catch (IOException e) {
Log.e(TAG, "Failed to create output stream.", e);
}
return;
}
public void write(String s)
{
Log.i(TAG, "Sending \""+s+"\"... ");
byte[] outBuffer= s.getBytes(); bk
try {
outStream.write(outBuffer);
} catch (IOException e) {
Log.e(TAG, "Write failed.", e);
}
}
public boolean streaming() bl
{
return ( (inStream!=null) && (outStream!=null) );
}
public String read() bm
{
if (!streaming()) return ""; bn
String inStr="";
try {
if (0<inStream.available()) {
byte[] inBuffer = new byte[1024];
int bytesRead = inStream.read(inBuffer);
inStr = new String(inBuffer, "ASCII");
inStr=inStr.substring(0, bytesRead); bo
Log.i(TAG, "byteCount: "+bytesRead+ ", inStr: "+inStr);
}
} catch (IOException e) {
Log.e(TAG, "Read failed", e);
}
return inStr;
}
public void close()
{
Log.i(TAG, "Bluetooth closing... ");
try {
socket.close(); bp
Log.i(TAG, "BT closed");
} catch (IOException e2) {
Log.e(TAG, "Failed to close socket. ", e2);
}
}
}