Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid Bluetooth connecting to Device socket.connect() wont connect
    text
    copied!<blockquote> <p>FIXED!!!</p> </blockquote> <p>Didnt work because of the UUID since api15 you can use a get function to get the uuid</p> <pre><code>UID uuid = bluetoothDevice.getUuids()[0].getUuid(); BluetoothSocket socket = bluetoothDevice.createRfcommSocketToServiceRecord(uuid); </code></pre> <blockquote> <p>FIXED!!!</p> </blockquote> <p>I am trying to connect to a devie to write data onto it. I can search for devices and if i click the connect thread gets started, but the "run()" function isnt called. The programm is stucked at</p> <p>Right now i am trying to connect to a bluetooth headset. I dont know if i am pairing the two devices? if i use the normal bluetooth of the phone, i am pairing the two devices with a code like 1 2 3 4 but in my program you dont have to enter a code. Can you help me pls?</p> <blockquote> <p>mmSocket.connect();</p> </blockquote> <p>So my connectedthread() never runs!</p> <p>here is my full code:</p> <p>public class MainActivity extends Activity {</p> <pre><code>private static final int REQUEST_ENABLE_BT = 1; private BluetoothAdapter mBluetoothAdapter = null; private ArrayAdapter&lt;String&gt; mNewDevicesArrayAdapter; ListView newDevicesListView; // Return Intent extra public static String EXTRA_DEVICE_ADDRESS = "device_address"; private ConnectingDevices mConnectingDevices = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); newDevicesListView = (ListView)findViewById(R.id.new_devices); mNewDevicesArrayAdapter=new ArrayAdapter&lt;String&gt;(MainActivity.this, android.R.layout.simple_list_item_1); newDevicesListView.setAdapter(mNewDevicesArrayAdapter); newDevicesListView.setOnItemClickListener(mDeviceClickListener); registerReceiver(mReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND)); mConnectingDevices = new ConnectingDevices(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void onClickbtnEtage1(View view) { mConnectingDevices.write(new byte[2]); } public void onClickbtnActivateBluetooth(View view) { if (mBluetoothAdapter == null) { Toast.makeText(this, "Bluetooth ist nicht verfügbar!", Toast.LENGTH_LONG).show(); finish(); return; } else if (!mBluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } Toast.makeText(this, "Bluetooth wurde aktiviert!", Toast.LENGTH_LONG).show(); findViewById(R.id.btnSearchDevices).setEnabled(true); } public void onClickbtnSearchDevices(View view) { mBluetoothAdapter.startDiscovery(); Toast.makeText(this, "Bluetooth Geräte werden gesucht!", Toast.LENGTH_LONG).show(); // Find and set up the ListView for newly discovered devices } // Create a BroadcastReceiver for ACTION_FOUND private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); // When discovery finds a device if (BluetoothDevice.ACTION_FOUND.equals(action)) { // Get the BluetoothDevice object from the Intent BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // If it's already paired, skip it, because it's been listed already if (device.getBondState() != BluetoothDevice.BOND_BONDED) { mNewDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress()); mNewDevicesArrayAdapter.notifyDataSetChanged(); } } } }; // The on-click listener for all devices in the ListViews private OnItemClickListener mDeviceClickListener = new OnItemClickListener() { public void onItemClick(AdapterView&lt;?&gt; av, View v, int arg2, long arg3) { // Cancel discovery because it's costly and we're about to connect mBluetoothAdapter.cancelDiscovery(); // Get the device MAC address, which is the last 17 chars in the View String info = ((TextView) v).getText().toString(); String address = info.substring(info.length() - 17); // Create the result Intent and include the MAC address Intent intent = new Intent(); intent.putExtra(EXTRA_DEVICE_ADDRESS, address); // Set result and finish this Activity // setResult(Activity.RESULT_OK, intent); // finish(); address = intent.getExtras().getString(EXTRA_DEVICE_ADDRESS); // Get the BLuetoothDevice object BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); // Attempt to connect to the device mConnectingDevices.connect(device); } };} </code></pre> <p>and my connectingdevices class</p> <pre><code> public class ConnectingDevices { boolean bconnectedthread = false; boolean bconnectthread = false; boolean bconnectedthreadstart = false; boolean bconnectthreadstart = false; boolean brun=false; boolean bconnectedsynchronized=false; //00001108-0000-1000-8000-00805F9B34FB private BluetoothAdapter mBluetoothAdapter = null; private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); private ConnectedThread mConnectedThread; //private final Handler mHandler; private ConnectThread mConnectThread; public void write(byte[] out) { boolean a=bconnectedthread; boolean b=bconnectthread; boolean c=bconnectedthreadstart; boolean d=bconnectthreadstart; boolean e=brun; boolean f=bconnectedsynchronized; // Create temporary object ConnectedThread r; // Synchronize a copy of the ConnectedThread synchronized (this) { r = mConnectedThread; } // Perform the write unsynchronized r.write(out); } private class ConnectThread extends Thread { private final BluetoothSocket mmSocket; private final BluetoothDevice mmDevice; public ConnectThread(BluetoothDevice device) { // Use a temporary object that is later assigned to mmSocket, // because mmSocket is final BluetoothSocket tmp = null; mmDevice = device; bconnectthread = true; // Get a BluetoothSocket to connect with the given BluetoothDevice try { // MY_UUID is the app's UUID string, also used by the server code tmp = device.createRfcommSocketToServiceRecord(MY_UUID); } catch (IOException e) { } mmSocket = tmp; } public void run() { // Cancel discovery because it will slow down the connection mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mBluetoothAdapter.cancelDiscovery(); brun=true; try { // Connect the device through the socket. This will block // until it succeeds or throws an exception mmSocket.connect(); } catch (IOException connectException) { // Unable to connect; close the socket and get out try { mmSocket.close(); } catch (IOException closeException) { } return; } // Do work to manage the connection (in a separate thread) //bconnectedthreadstart = true; connected(mmSocket); } /** Will cancel an in-progress connection, and close the socket */ public void cancel() { try { mmSocket.close(); } catch (IOException e) { } } } private class ConnectedThread extends Thread { private final BluetoothSocket mmSocket; private final InputStream mmInStream; private final OutputStream mmOutStream; public ConnectedThread(BluetoothSocket socket) { mmSocket = socket; InputStream tmpIn = null; OutputStream tmpOut = null; bconnectedthread=true; // 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[1024]; // 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); // Send the obtained bytes to the UI activity // mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer) // .sendToTarget(); } catch (IOException e) { break; } } } /* Call this from the main activity to send data to the remote device */ public void write(byte[] bytes) { try { mmOutStream.write(bytes); } catch (IOException e) { } } /* Call this from the main activity to shutdown the connection */ public void cancel() { try { mmSocket.close(); } catch (IOException e) { } } } public synchronized void connect(BluetoothDevice device) { bconnectthreadstart=true; mConnectThread = new ConnectThread(device); mConnectThread.start(); } public synchronized void connected(BluetoothSocket socket) { bconnectedsynchronized=true; mConnectedThread = new ConnectedThread(socket); mConnectedThread.start(); }} logcat 05-21 17:49:29.902: W/dalvikvm(25720): threadid=1: thread exiting with uncaught exception (group=0x417da498) 05-21 17:49:29.912: E/AndroidRuntime(25720): FATAL EXCEPTION: main 05-21 17:49:29.912: E/AndroidRuntime(25720): java.lang.IllegalStateException: Could not execute method of the activity 05-21 17:49:29.912: E/AndroidRuntime(25720): at android.view.View$1.onClick(View.java:3676) 05-21 17:49:29.912: E/AndroidRuntime(25720): at android.view.View.performClick(View.java:4171) 05-21 17:49:29.912: E/AndroidRuntime(25720): at android.view.View$PerformClick.run(View.java:17070) 05-21 17:49:29.912: E/AndroidRuntime(25720): at android.os.Handler.handleCallback(Handler.java:615) 05-21 17:49:29.912: E/AndroidRuntime(25720): at android.os.Handler.dispatchMessage(Handler.java:92) 05-21 17:49:29.912: E/AndroidRuntime(25720): at android.os.Looper.loop(Looper.java:137) 05-21 17:49:29.912: E/AndroidRuntime(25720): at android.app.ActivityThread.main(ActivityThread.java:4797) 05-21 17:49:29.912: E/AndroidRuntime(25720): at java.lang.reflect.Method.invokeNative(Native Method) 05-21 17:49:29.912: E/AndroidRuntime(25720): at java.lang.reflect.Method.invoke(Method.java:511) 05-21 17:49:29.912: E/AndroidRuntime(25720): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:804) 05-21 17:49:29.912: E/AndroidRuntime(25720): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:571) 05-21 17:49:29.912: E/AndroidRuntime(25720): at dalvik.system.NativeStart.main(Native Method) 05-21 17:49:29.912: E/AndroidRuntime(25720): Caused by: java.lang.reflect.InvocationTargetException 05-21 17:49:29.912: E/AndroidRuntime(25720): at java.lang.reflect.Method.invokeNative(Native Method) 05-21 17:49:29.912: E/AndroidRuntime(25720): at java.lang.reflect.Method.invoke(Method.java:511) 05-21 17:49:29.912: E/AndroidRuntime(25720): at android.view.View$1.onClick(View.java:3671) 05-21 17:49:29.912: E/AndroidRuntime(25720): ... 11 more 05-21 17:49:29.912: E/AndroidRuntime(25720): Caused by: java.lang.NullPointerException 05-21 17:49:29.912: E/AndroidRuntime(25720): at com.example.elevator.ConnectingDevices.write(ConnectingDevices.java:40) 05-21 17:49:29.912: E/AndroidRuntime(25720): at com.example.elevator.MainActivity.onClickbtnEtage1(MainActivity.java:63) 05-21 17:49:29.912: E/AndroidRuntime(25720): ... 14 more 05-21 17:49:49.062: I/System.out(27064): Debugger has connected 05-21 17:49:49.062: I/System.out(27064): waiting for debugger to settle... 05-21 17:49:49.262: I/System.out(27064): waiting for debugger to settle... 05-21 17:49:49.472: I/System.out(27064): waiting for debugger to settle... 05-21 17:49:49.663: I/System.out(27064): waiting for debugger to settle... 05-21 17:49:49.863: I/System.out(27064): waiting for debugger to settle... 05-21 17:49:50.063: I/System.out(27064): waiting for debugger to settle... 05-21 17:49:50.263: I/System.out(27064): waiting for debugger to settle... 05-21 17:49:50.474: I/System.out(27064): debugger has settled (1455) 05-21 17:49:50.684: W/ResourceType(27064): No package identifier when getting value for resource number 0x00000000 05-21 17:49:50.684: W/PackageManager(27064): Failure retrieving resources forcom.example.elevator: Resource ID #0x0 05-21 17:49:50.944: D/IconCustomizer(27064): Generate customized icon for com.example.elevator.png 05-21 17:49:50.984: W/IconCustomizer(27064): can't load transform_config.xml 05-21 17:49:51.164: I/themeservice(27064): add pending job /data/data/com.example.elevator/cache/com.example.elevator.png 05-21 17:49:51.174: I/themeservice(27064): binding service 05-21 17:49:51.344: I/themeservice(27064): service connected 05-21 17:49:51.344: I/themeservice(27064): saving icon for /data/data/com.example.elevator/cache/com.example.elevator.png 05-21 17:49:51.415: I/Adreno200-EGL(27064): &lt;qeglDrvAPI_eglInitialize:294&gt;: EGL 1.4 QUALCOMM build: (CL3068996) 05-21 17:49:51.415: I/Adreno200-EGL(27064): Build Date: 03/07/13 Thu 05-21 17:49:51.415: I/Adreno200-EGL(27064): Local Branch: au37 05-21 17:49:51.415: I/Adreno200-EGL(27064): Remote Branch: 05-21 17:49:51.415: I/Adreno200-EGL(27064): Local Patches: 05-21 17:49:51.415: I/Adreno200-EGL(27064): Reconstruct Branch: 05-21 17:49:52.346: I/themeservice(27064): unbinding service 05-21 17:50:36.903: I/ConnectingDevices(27064): connectthread function started 05-21 17:50:36.903: I/ConnectingDevices(27064): connectthread is working 05-21 17:50:36.913: I/ConnectingDevices(27064): connectthread is running 05-21 17:50:36.953: E/ConnectingDevices(27064): mmSocket unable to connect 05-21 17:50:36.953: E/ConnectingDevices(27064): java.io.IOException: Unable to start Service Discovery 05-21 17:50:36.953: E/ConnectingDevices(27064): at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:455) 05-21 17:50:36.953: E/ConnectingDevices(27064): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:230) 05-21 17:50:36.953: E/ConnectingDevices(27064): at com.example.elevator.ConnectingDevices$ConnectThread.run(ConnectingDevices.java:77) </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload