Boa tarde galera!
Estou tentando fazer uma conexão no android com o bletooth mas não estou conseguindo depois de tudo que li creio que o problema seja no UUID, mas não consigo resolve-lo.
Por isso peço ajuda de vocês!
Obrigado.
[code]package com.example.eugenio.chuveiroeconomico;
import android.annotation.TargetApi;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.ParcelUuid;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.example.eugenio.chuveiroeconomico.util.SystemUiHider;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.util.UUID;
/**
-
An example full-screen activity that shows and hides the system UI (i.e.
-
status bar and navigation/system bar) with user interaction.
-
@see SystemUiHider
*/
public class ChuveiroEconomico extends Activity {private static final boolean AUTO_HIDE = true;
private static final int AUTO_HIDE_DELAY_MILLIS = 3000;
private static final boolean TOGGLE_ON_CLICK = true;
private static final int HIDER_FLAGS = SystemUiHider.FLAG_HIDE_NAVIGATION;
private SystemUiHider mSystemUiHider;private static final String TAG = “bluetooth1”;
Button btnOn, btnOff;
Handler h;
TextView tvRecebido;final int RECIEVE_MESSAGE = 1; // Status for Handler
private BluetoothAdapter btAdapter = null;
private BluetoothSocket btSocket = null;
private StringBuilder sb = new StringBuilder();
private ConnectedThread mConnectedThread;// SPP UUID service
private static final UUID MY_UUID = UUID.fromString(“00001101-0000-1000-8000-00805F9B34FB”);// MAC-address of Bluetooth module (you must edit this line)
private static String address = “20:14:05:15:32:00”;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chuveiro_economico);final View controlsView = findViewById(R.id.fullscreen_content_controls); final View contentView = findViewById(R.id.fullscreen_content); // Set up an instance of SystemUiHider to control the system UI for // this activity. mSystemUiHider = SystemUiHider.getInstance(this, contentView, HIDER_FLAGS); mSystemUiHider.setup(); mSystemUiHider .setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() { // Cached values. int mControlsHeight; int mShortAnimTime; @Override @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) public void onVisibilityChange(boolean visible) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { // If the ViewPropertyAnimator API is available // (Honeycomb MR2 and later), use it to animate the // in-layout UI controls at the bottom of the // screen. if (mControlsHeight == 0) { mControlsHeight = controlsView.getHeight(); } if (mShortAnimTime == 0) { mShortAnimTime = getResources().getInteger( android.R.integer.config_shortAnimTime); } controlsView.animate() .translationY(visible ? 0 : mControlsHeight) .setDuration(mShortAnimTime); } else { // If the ViewPropertyAnimator APIs aren't // available, simply show or hide the in-layout UI // controls. controlsView.setVisibility(visible ? View.VISIBLE : View.GONE); } if (visible && AUTO_HIDE) { // Schedule a hide(). delayedHide(AUTO_HIDE_DELAY_MILLIS); } } }); // Set up the user interaction to manually show or hide the system UI. contentView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (TOGGLE_ON_CLICK) { mSystemUiHider.toggle(); } else { mSystemUiHider.show(); } } }); // Upon interacting with UI controls, delay any scheduled hide() // operations to prevent the jarring behavior of controls going away // while interacting with the UI. findViewById(R.id.dummy_button).setOnTouchListener(mDelayHideTouchListener); tvRecebido = (TextView) findViewById(R.id.textoRecebido); // for display the received data from the Arduino h = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case RECIEVE_MESSAGE: // if receive massage byte[] readBuf = (byte[]) msg.obj; String strIncom = new String(readBuf, 0, msg.arg1); // create string from bytes array sb.append(strIncom); // append string int endOfLineIndex = sb.indexOf("\r\n"); // determine the end-of-line if (endOfLineIndex > 0) { // if end-of-line, String sbprint = sb.substring(0, endOfLineIndex); // extract string sb.delete(0, sb.length()); // and clear tvRecebido.setText("Data from Arduino: " + sbprint); // update TextView } //Log.d(TAG, "...String:"+ sb.toString() + "Byte:" + msg.arg1 + "..."); break; } } ; }; btAdapter = BluetoothAdapter.getDefaultAdapter(); // get Bluetooth adapter checkBTState();
}
private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException {
if (Build.VERSION.SDK_INT >= 10) {
ParcelUuid list[] = device.getUuids();
try {
final Method m = device.getClass().getMethod(“createInsecureRfcommSocketToServiceRecord”, new Class[]{UUID.class});
device.getClass().getMethod()
return (BluetoothSocket) m.invoke(device, list[0]);
} catch (Exception e) {
Log.e(TAG, “Could not create Insecure RFComm Connection”, e);
}
}
return device.createRfcommSocketToServiceRecord(MY_UUID);
}private void checkBTState() {
// Check for Bluetooth support and then check to make sure it is turned on
// Emulator doesn’t support Bluetooth and will return null
if (btAdapter == null) {
errorExit(“Fatal Error”, “Bluetooth not support”);
} else {
if (btAdapter.isEnabled()) {
Log.d(TAG, “…Bluetooth ON…”);
} else {
//Prompt user to turn on Bluetooth
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, 1);
}
}
}private void errorExit(String title, String message) {
Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show();
finish();
}private class ConnectedThread extends Thread {
private final InputStream mmInStream;
private final OutputStream mmOutStream;public ConnectedThread(BluetoothSocket socket) { InputStream tmpIn = null; OutputStream tmpOut = null; // Get the input and output streams, using temp objects because // member streams are final try { tmpIn = socket.getInputStream(); tmpOut = socket.getOutputStream(); } catch (IOException e) { } mmInStream = tmpIn; mmOutStream = tmpOut; } public void run() { byte[] buffer = new byte[256]; // buffer store for the stream int bytes; // bytes returned from read() // Keep listening to the InputStream until an exception occurs while (true) { try { // Read from the InputStream bytes = mmInStream.read(buffer); // Get number of bytes and message in "buffer" h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget(); // Send to message queue Handler } catch (IOException e) { break; } } } /* Call this from the main activity to send data to the remote device */ public void write(String message) { Log.d(TAG, "...Data to send: " + message + "..."); byte[] msgBuffer = message.getBytes(); try { mmOutStream.write(msgBuffer); } catch (IOException e) { Log.d(TAG, "...Error data send: " + e.getMessage() + "..."); } }
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, “…In onPause()…”);try { btSocket.close(); } catch (IOException e2) { errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + "."); }
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, “…onResume - try connect…”);// Set up a pointer to the remote node using it's address. BluetoothDevice device = btAdapter.getRemoteDevice(address); // Two things are needed to make a connection: // A MAC address, which we got above. // A Service ID or UUID. In this case we are using the // UUID for SPP. try { btSocket = createBluetoothSocket(device); } catch (IOException e) { errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + "."); } // Discovery is resource intensive. Make sure it isn't going on // when you attempt to connect and pass your message. btAdapter.cancelDiscovery(); // Establish the connection. This will block until it connects. 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() + "."); } } // Create a data stream so we can talk to server. Log.d(TAG, "...Create Socket..."); mConnectedThread = new ConnectedThread(btSocket); mConnectedThread.start();
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);// Trigger the initial hide() shortly after the activity has been // created, to briefly hint to the user that UI controls // are available. delayedHide(100);
}
/**
- Touch listener to use for in-layout UI controls to delay hiding the
- system UI. This is to prevent the jarring behavior of controls going away
- while interacting with activity UI.
*/
View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (AUTO_HIDE) {
delayedHide(AUTO_HIDE_DELAY_MILLIS);
}
return false;
}
};
Handler mHideHandler = new Handler();
Runnable mHideRunnable = new Runnable() {
@Override
public void run() {
mSystemUiHider.hide();
}
};/**
- Schedules a call to hide() in [delay] milliseconds, canceling any
- previously scheduled calls.
*/
private void delayedHide(int delayMillis) {
mHideHandler.removeCallbacks(mHideRunnable);
mHideHandler.postDelayed(mHideRunnable, delayMillis);
}
}
[/code]
Onde eu creio que seja o erro.
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);
}
06-17 13:11:34.355 7460-7460/com.example.eugenio.chuveiroeconomico D/bluetooth1﹕ ...Connecting...
06-17 13:11:34.355 7460-7460/com.example.eugenio.chuveiroeconomico D/BluetoothUtils﹕ isSocketAllowedBySecurityPolicy start : device null
06-17 13:11:34.355 7460-7460/com.example.eugenio.chuveiroeconomico W/BluetoothAdapter﹕ getBluetoothService() called with no BluetoothManagerCallback
06-17 13:11:34.355 7460-7460/com.example.eugenio.chuveiroeconomico D/BluetoothSocket﹕ connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[50]}
06-17 13:11:41.995 7460-7460/com.example.eugenio.chuveiroeconomico D/bluetooth1﹕ ...Create Socket...
06-17 13:11:41.995 7460-7460/com.example.eugenio.chuveiroeconomico D/BluetoothUtils﹕ isSocketAllowedBySecurityPolicy start : device null
06-17 13:11:42.005 7460-7460/com.example.eugenio.chuveiroeconomico D/BluetoothUtils﹕ isSocketAllowedBySecurityPolicy start : device null