3

In my android application I want to send the string from one device to another via Bluetooth. Available devices are shown in the list view…. I want to send the string with out pairing … I m failed to establish the connection between the devices… Can anyone help me to establish the connection and to send the string…i have lot of examples but cant figure out what stuff needed for file transfer. if anyone do it already pls help me. Uncompleted code is given below

public class MainActivity extends Activity 
{

    ToggleButton tb1;
    Button tb2, tb3;
    String tbstate1, tbstate2, tbstate3;
    EditText textPhoneNo, textTo;
    BluetoothAdapter myBTadapter;
    ArrayAdapter<String> btArrayAdapter;
    String tbstate;
    ListView listDevicesFound;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tb1 = (ToggleButton) findViewById(R.id.m_m_btn);
        tb2 = (Button) findViewById(R.id.sms_btn);
        tb3 = (Button) findViewById(R.id.email_btn);




        myBTadapter = BluetoothAdapter.getDefaultAdapter();


        listDevicesFound = (ListView) findViewById(R.id.devicesfound);
        btArrayAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1);
        listDevicesFound.setAdapter(btArrayAdapter);

//      listDevicesFound.setAdapter(detectedAdapter);
//      listDevicesFound = new ListItemClicked();
//       detectedAdapter.notifyDataSetChanged();
//      

        registerReceiver(ActionFoundReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));



                tb1.setOnClickListener(new OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {
                        tbstate = tb1.getText().toString();
                        if (tbstate.equals("ON"))
                        {
                            if (myBTadapter == null) 
                            {
                                tb1.setEnabled(false);

                            }
                            else
                            {
                                if (myBTadapter.isEnabled())

                                {
                                    myBTadapter.startDiscovery();

                                //  Toast.makeText(getApplicationContext(), "Bluetooth 1 ",Toast.LENGTH_LONG).show();

                                    //myBTadapter.disable();
                                }

                                else 
                                {

                                    myBTadapter.enable();
                                    myBTadapter.startDiscovery();

                                    //Toast.makeText(getApplicationContext(), "Bluetooth 2 ",Toast.LENGTH_LONG).show();

                                }


                            }


                            // check the status and set the button text
                            // accordingly

                                }
                        else
                        {
                            myBTadapter.disable();
                            btArrayAdapter.clear();
                            /*if (myBTadapter.isEnabled())

                            {
                                myBTadapter.disable();
                            }
                            else 
                            {
                                Toast.makeText(getApplicationContext(), "Bluetooth 3 ",Toast.LENGTH_LONG).show();
                            }   */
                        } 

                    }
                }
                );

            }



    private final BroadcastReceiver ActionFoundReceiver = new BroadcastReceiver() 
    {

        @Override
        public void onReceive(Context context, Intent intent) 
        {
            // TODO Auto-generated method stub
            String action = intent.getAction();
            if (BluetoothDevice.ACTION_FOUND.equals(action))
            {
                BluetoothDevice device = intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                btArrayAdapter.add(device.getName() + "\n"+ device.getAddress());
                btArrayAdapter.notifyDataSetChanged();
            }
        }

    };


}
Amith
  • 127
  • 1
  • 4
  • 11

1 Answers1

6

If you are sending via Bluetooth, you need to make a UUID object and use it to open the socket connection. I used a thread to listen for in coming data. you will also need a function to open and close the bluetooth connection.

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);
                                       }
                                  });
                             }else {
                                  readBuffer[readBufferPosition++] = b;
                             }
                        }
                   }
              }catch (IOException ex) {
                   stopWorker = true;
              }
         }
    }
});

workerThread.start();
}

void sendData() throws IOException {
     String msg = myTextbox.getText().toString();
     msg += "\n";
     //mmOutputStream.write(msg.getBytes());
     mmOutputStream.write('A');
     myLabel.setText("Data Sent");
}
user3303136
  • 61
  • 1
  • 3