So habe mal aus deinen Code eine Klasse Blauzahn erstellt
public class Blauzahn
{
private static final String TAG = "bluetooth1";
Context context;
//Bluetooth Adapter Initialisierung
private BluetoothAdapter btAdapter = null;
private BluetoothSocket btSocket = null;
private OutputStream outStream = null;
// SPP UUID service
private final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
// MAC-address von unserem Bluetooth modul
private String address = "98:D3:31:FB:6C:B2";
public Blauzahn(Context c){
context = c;
}
private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException
{
if(Build.VERSION.SDK_INT >= 10)
{
try
{
final Method m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class });
return (BluetoothSocket) m.invoke(device, MY_UUID);
}
catch (Exception e)
{
Log.e(TAG, "Could not create Insecure RFComm Connection",e);
}
}
return device.createRfcommSocketToServiceRecord(MY_UUID);
}
//Bluetooth verbindungsaufbau
public void Verbindungstarten()
{
btAdapter = BluetoothAdapter.getDefaultAdapter();
checkBTState();
Log.d(TAG, "...onResume - try connect...");
BluetoothDevice device = btAdapter.getRemoteDevice(address);
try
{
btSocket = createBluetoothSocket(device);
}
catch (IOException e1)
{
errorExit("Fatal Error", "In onResume() and socket create failed: " + e1.getMessage() + ".");
}
// Verbindungsaufbau-blockiert, bis verbunden
btAdapter.cancelDiscovery();
//Data-Stream wird erstellt um Verbindungsaufbau zum Server durchzusetzen
Log.d(TAG, "...Connecting...");
try
{
btSocket.connect();
Log.d(TAG, "...Connection ok...");
}
catch (IOException e)
{
try {
btSocket.close();
}
catch (IOException e2)
{
errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + ".");
}
}
Log.d(TAG, "...Create Socket...");
try
{
outStream = btSocket.getOutputStream();
} catch (IOException e)
{
errorExit("Fatal Error", "In onResume() and output stream creation failed:" + e.getMessage() + ".");
}
}
public void VerbindungBeenden()
{
Log.d(TAG, "...In onPause()...");
if (outStream != null)
{
try
{
outStream.flush();
}
catch (IOException e)
{
errorExit("Fatal Error", "In onPause() and failed to flush output stream: " + e.getMessage() + ".");
}
}
try
{
btSocket.close();
}
catch (IOException e2)
{
errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + ".");
}
}
private void checkBTState()
{
if(btAdapter==null)
{
errorExit("Fatal Error", "Bluetooth not support");
}
else
{
if (btAdapter.isEnabled())
{
Log.d(TAG, "...Bluetooth ON...");
}
else
{
//Zeigt an, dass Bluetooth angeschaltet werden muss
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, 1);
}
}
}
private void startActivityForResult(Intent enableBtIntent, int i) {
}
//Fehlermeldung
private void errorExit(String title, String message) {
Toast.makeText(context, title + " - " + message, Toast.LENGTH_LONG).show();
}
//Methode um Daten über Bluetooth zu senden
public void sendData(String message)
{
byte[] msgBuffer = message.getBytes();
Log.d(TAG, "...Send data: " + message + "...");
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 35 in the java code";
msg = msg + ".\n\nCheck that the SPP UUID: " + MY_UUID.toString() + " exists on server.\n\n";
errorExit("Fatal Error", msg);
}
}
Alles anzeigen
Die MainActivity aus dem Beispiel.
public class MainActivity extends Activity {
private static final String TAG = "bluetooth1";
Button btnOn, btnOff;
Blauzahn bl1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnOn = (Button) findViewById(R.id.btnOn);
btnOff = (Button) findViewById(R.id.btnOff);
bl1 = new Blauzahn(this);
btnOn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
bl1.sendData("1");
Toast.makeText(getApplicationContext(), "Turn on LED", Toast.LENGTH_SHORT).show();
}
});
btnOff.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
bl1.sendData("0");
Toast.makeText(getApplicationContext(), "Turn off LED", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onResume() {
super.onResume();
bl1.Verbindungstarten();
}
@Override
public void onPause() {
super.onPause();
bl1.VerbindungBeenden();
}
}
Alles anzeigen
Die Verbindung wird automatisch beim sichtbar werden der Activity hergestellt. Dies wird durch den aufruf der onResume vom Bs automatisch gemacht. Kannst es aber auch auf einen Button legen.
Der Verbindungs abbau wird auch automatisch in der onPause gemacht. Diese Methode wird auch vom BS selber aufgerufen wenn die Activity beendet oder in den Hintergrund tritt. Wenn du einen Intent zu einer anderen Activity machst wird die alte Activity beendet und somit auch die Verbindung unterbrochen. Die müsstest du dann in der neuen Activity wieder neu aufbauen entweder in den Callback Methoden oder Mannuel z.B. Button.
https://de.wikibooks.org/wiki/Googles_Android/_Bluetooth
https://www.frag-duino.de/inde…einem-arduino-und-android
PS. habe noch eine kleinigkeit im Code geändert .