1. Are you ready for the Galaxy S20? Here is everything we know so far!

Bluetooth connection in activity and fragment

Discussion in 'Android Development' started by systx, Feb 3, 2016.

  1. systx

    systx Lurker
    Thread Starter

    I have android project, to control led on my arduino.

    DeviceList.java

    Code (Text):
    1.  
    2.         package com.led.led;
    3.    
    4.     import android.content.Intent;
    5.     import android.support.v7.app.ActionBarActivity;
    6.     import android.os.Bundle;
    7.     import android.view.Menu;
    8.     import android.view.MenuItem;
    9.     import android.view.View;
    10.     import android.widget.AdapterView;
    11.     import android.widget.ArrayAdapter;
    12.     import android.widget.Button;
    13.     import android.widget.ListView;
    14.     import android.bluetooth.BluetoothAdapter;
    15.     import android.bluetooth.BluetoothDevice;
    16.     import android.widget.TextView;
    17.     import android.widget.Toast;
    18.    
    19.     import java.util.ArrayList;
    20.     import java.util.Set;
    21.    
    22.    
    23.     public class DeviceList extends ActionBarActivity
    24.     {
    25.         //widgets
    26.         Button btnPaired;
    27.         ListView devicelist;
    28.         //Bluetooth
    29.         private BluetoothAdapter myBluetooth = null;
    30.         private Set<BluetoothDevice> pairedDevices;
    31.         public static String EXTRA_ADDRESS = "device_address";
    32.    
    33.         @Override
    34.         protected void onCreate(Bundle savedInstanceState)
    35.         {
    36.             super.onCreate(savedInstanceState);
    37.             setContentView(R.layout.activity_device_list);
    38.    
    39.             //Calling widgets
    40.             btnPaired = (Button)findViewById(R.id.button);
    41.             devicelist = (ListView)findViewById(R.id.listView);
    42.    
    43.             //if the device has bluetooth
    44.             myBluetooth = BluetoothAdapter.getDefaultAdapter();
    45.    
    46.             if(myBluetooth == null)
    47.             {
    48.                 //Show a mensag. that the device has no bluetooth adapter
    49.                 Toast.makeText(getApplicationContext(), "Bluetooth Device Not Available", Toast.LENGTH_LONG).show();
    50.    
    51.                 //finish apk
    52.                 finish();
    53.             }
    54.             else if(!myBluetooth.isEnabled())
    55.             {
    56.                     //Ask to the user turn the bluetooth on
    57.                     Intent turnBTon = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    58.                     startActivityForResult(turnBTon,1);
    59.             }
    60.    
    61.             btnPaired.setOnClickListener(new View.OnClickListener() {
    62.                 @Override
    63.                 public void onClick(View v)
    64.                 {
    65.                     pairedDevicesList();
    66.                 }
    67.             });
    68.    
    69.         }
    70.    
    71.         private void pairedDevicesList()
    72.         {
    73.             pairedDevices = myBluetooth.getBondedDevices();
    74.             ArrayList list = new ArrayList();
    75.    
    76.             if (pairedDevices.size()>0)
    77.             {
    78.                 for(BluetoothDevice bt : pairedDevices)
    79.                 {
    80.                     list.add(bt.getName() + "\n" + bt.getAddress()); //Get the device's name and the address
    81.                 }
    82.             }
    83.             else
    84.             {
    85.                 Toast.makeText(getApplicationContext(), "No Paired Bluetooth Devices Found.", Toast.LENGTH_LONG).show();
    86.             }
    87.    
    88.             final ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, list);
    89.             devicelist.setAdapter(adapter);
    90.             devicelist.setOnItemClickListener(myListClickListener); //Method called when the device from the list is clicked
    91.    
    92.         }
    93.    
    94.         private AdapterView.OnItemClickListener myListClickListener = new AdapterView.OnItemClickListener()
    95.         {
    96.             public void onItemClick (AdapterView<?> av, View v, int arg2, long arg3)
    97.             {
    98.                 // Get the device MAC address, the last 17 chars in the View
    99.                 String info = ((TextView) v).getText().toString();
    100.                 String address = info.substring(info.length() - 17);
    101.    
    102.                 // Make an intent to start next activity.
    103.                 Intent i = new Intent(DeviceList.this, ledControl.class);
    104.    
    105.                 //Change the activity.
    106.                 i.putExtra(EXTRA_ADDRESS, address); //this will be received at ledControl (class) Activity
    107.                 startActivity(i);
    108.             }
    109.         };
    110.    
    111.    
    112.         @Override
    113.         public boolean onCreateOptionsMenu(Menu menu)
    114.         {
    115.             // Inflate the menu; this adds items to the action bar if it is present.
    116.             getMenuInflater().inflate(R.menu.menu_device_list, menu);
    117.             return true;
    118.         }
    119.    
    120.         @Override
    121.         public boolean onOptionsItemSelected(MenuItem item) {
    122.             // Handle action bar item clicks here. The action bar will
    123.             // automatically handle clicks on the Home/Up button, so long
    124.             // as you specify a parent activity in AndroidManifest.xml.
    125.             int id = item.getItemId();
    126.    
    127.             //noinspection SimplifiableIfStatement
    128.             if (id == R.id.action_settings) {
    129.                 return true;
    130.             }
    131.    
    132.             return super.onOptionsItemSelected(item);
    133.         }
    134.     }
    135.  

    ledControl.java

    Code (Text):
    1.  
    2.     package com.led.led;
    3.    
    4.     import android.support.v7.app.ActionBarActivity;
    5.     import android.os.Bundle;
    6.     import android.view.Menu;
    7.     import android.view.MenuItem;
    8.    
    9.     import android.bluetooth.BluetoothSocket;
    10.     import android.content.Intent;
    11.     import android.view.View;
    12.     import android.widget.Button;
    13.     import android.widget.SeekBar;
    14.     import android.widget.TextView;
    15.     import android.widget.Toast;
    16.     import android.app.ProgressDialog;
    17.     import android.bluetooth.BluetoothAdapter;
    18.     import android.bluetooth.BluetoothDevice;
    19.     import android.os.AsyncTask;
    20.    
    21.     import java.io.IOException;
    22.     import java.util.UUID;
    23.    
    24.    
    25.     public class ledControl extends ActionBarActivity {
    26.    
    27.         Button btnOn, btnOff, btnDis;
    28.         SeekBar brightness;
    29.         TextView lumn;
    30.         String address = null;
    31.         private ProgressDialog progress;
    32.         BluetoothAdapter myBluetooth = null;
    33.         BluetoothSocket btSocket = null;
    34.         private boolean isBtConnected = false;
    35.         //SPP UUID. Look for it
    36.         static final UUID myUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
    37.    
    38.         @Override
    39.         protected void onCreate(Bundle savedInstanceState)
    40.         {
    41.             super.onCreate(savedInstanceState);
    42.    
    43.             Intent newint = getIntent();
    44.             address = newint.getStringExtra(DeviceList.EXTRA_ADDRESS); //receive the address of the bluetooth device
    45.    
    46.             //view of the ledControl
    47.             setContentView(R.layout.activity_led_control);
    48.    
    49.             //call the widgtes
    50.             btnOn = (Button)findViewById(R.id.button2);
    51.             btnOff = (Button)findViewById(R.id.button3);
    52.             btnDis = (Button)findViewById(R.id.button4);
    53.             brightness = (SeekBar)findViewById(R.id.seekBar);
    54.             lumn = (TextView)findViewById(R.id.lumn);
    55.    
    56.             new ConnectBT().execute(); //Call the class to connect
    57.    
    58.             //commands to be sent to bluetooth
    59.             btnOn.setOnClickListener(new View.OnClickListener()
    60.             {
    61.                 @Override
    62.                 public void onClick(View v)
    63.                 {
    64.                     turnOnLed();      //method to turn on
    65.                 }
    66.             });
    67.    
    68.             btnOff.setOnClickListener(new View.OnClickListener() {
    69.                 @Override
    70.                 public void onClick(View v)
    71.                 {
    72.                     turnOffLed();   //method to turn off
    73.                 }
    74.             });
    75.    
    76.             btnDis.setOnClickListener(new View.OnClickListener()
    77.             {
    78.                 @Override
    79.                 public void onClick(View v)
    80.                 {
    81.                     Disconnect(); //close connection
    82.                 }
    83.             });
    84.    
    85.             brightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    86.                 @Override
    87.                 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    88.                     if (fromUser==true)
    89.                     {
    90.                         lumn.setText(String.valueOf(progress));
    91.                         try
    92.                         {
    93.                             btSocket.getOutputStream().write(String.valueOf(progress).getBytes());
    94.                         }
    95.                         catch (IOException e)
    96.                         {
    97.    
    98.                         }
    99.                     }
    100.                 }
    101.    
    102.                 @Override
    103.                 public void onStartTrackingTouch(SeekBar seekBar) {
    104.    
    105.                 }
    106.    
    107.                 @Override
    108.                 public void onStopTrackingTouch(SeekBar seekBar) {
    109.    
    110.                 }
    111.             });
    112.         }
    113.    
    114.         private void Disconnect()
    115.         {
    116.             if (btSocket!=null) //If the btSocket is busy
    117.             {
    118.                 try
    119.                 {
    120.                     btSocket.close(); //close connection
    121.                 }
    122.                 catch (IOException e)
    123.                 { msg("Error");}
    124.             }
    125.             finish(); //return to the first layout
    126.    
    127.         }
    128.    
    129.         private void turnOffLed()
    130.         {
    131.             if (btSocket!=null)
    132.             {
    133.                 try
    134.                 {
    135.                     btSocket.getOutputStream().write("1".toString().getBytes());
    136.                 }
    137.                 catch (IOException e)
    138.                 {
    139.                     msg("Error");
    140.                 }
    141.             }
    142.         }
    143.    
    144.         private void turnOnLed()
    145.         {
    146.             if (btSocket!=null)
    147.             {
    148.                 try
    149.                 {
    150.                     btSocket.getOutputStream().write("2".toString().getBytes());
    151.                 }
    152.                 catch (IOException e)
    153.                 {
    154.                     msg("Error");
    155.                 }
    156.             }
    157.         }
    158.    
    159.         // fast way to call Toast
    160.         private void msg(String s)
    161.         {
    162.             Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show();
    163.         }
    164.    
    165.         @Override
    166.         public boolean onCreateOptionsMenu(Menu menu) {
    167.             // Inflate the menu; this adds items to the action bar if it is present.
    168.             getMenuInflater().inflate(R.menu.menu_led_control, menu);
    169.             return true;
    170.         }
    171.    
    172.         @Override
    173.         public boolean onOptionsItemSelected(MenuItem item) {
    174.             // Handle action bar item clicks here. The action bar will
    175.             // automatically handle clicks on the Home/Up button, so long
    176.             // as you specify a parent activity in AndroidManifest.xml.
    177.             int id = item.getItemId();
    178.    
    179.             //noinspection SimplifiableIfStatement
    180.             if (id == R.id.action_settings) {
    181.                 return true;
    182.             }
    183.    
    184.             return super.onOptionsItemSelected(item);
    185.         }
    186.    
    187.         private class ConnectBT extends AsyncTask<Void, Void, Void>  // UI thread
    188.         {
    189.             private boolean ConnectSuccess = true; //if it's here, it's almost connected
    190.    
    191.             @Override
    192.             protected void onPreExecute()
    193.             {
    194.                 progress = ProgressDialog.show(ledControl.this, "Connecting...", "Please wait!!!");  //show a progress dialog
    195.             }
    196.    
    197.             @Override
    198.             protected Void doInBackground(Void... devices) //while the progress dialog is shown, the connection is done in background
    199.             {
    200.                 try
    201.                 {
    202.                     if (btSocket == null || !isBtConnected)
    203.                     {
    204.                      myBluetooth = BluetoothAdapter.getDefaultAdapter();//get the mobile bluetooth device
    205.                      BluetoothDevice dispositivo = myBluetooth.getRemoteDevice(address);//connects to the device's address and checks if it's available
    206.                      btSocket = dispositivo.createInsecureRfcommSocketToServiceRecord(myUUID);//create a RFCOMM (SPP) connection
    207.                      BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
    208.                      btSocket.connect();//start connection
    209.                     }
    210.                 }
    211.                 catch (IOException e)
    212.                 {
    213.                     ConnectSuccess = false;//if the try failed, you can check the exception here
    214.                 }
    215.                 return null;
    216.             }
    217.             @Override
    218.             protected void onPostExecute(Void result) //after the doInBackground, it checks if everything went fine
    219.             {
    220.                 super.onPostExecute(result);
    221.    
    222.                 if (!ConnectSuccess)
    223.                 {
    224.                     msg("Connection Failed. Is it a SPP Bluetooth? Try again.");
    225.                     finish();
    226.                 }
    227.                 else
    228.                 {
    229.                     msg("Connected.");
    230.                     isBtConnected = true;
    231.                 }
    232.                 progress.dismiss();
    233.             }
    234.         }
    235.     }
    236.  
    When connection is successfuly opens ledControl.java. I like to create new fragment which will be open from ledControl. Now i like to know how can i get bluetooth connection from ledControl activity and control new led from this fragment? I need on fragment only on/off button and Bluetooth connection to comunicate with android.. Please if anyone can help me?

    ex:

    i need some like this in my Fragment.java

    Code (Text):
    1.  
    2.                 btnOn.setOnClickListener(new View.OnClickListener()
    3.             {
    4.                 @Override
    5.                 public void onClick(View v)
    6.                 {
    7.                     turnOnLed();      //method to turn on
    8.                 }
    9.             });
    10.    
    11.             btnOff.setOnClickListener(new View.OnClickListener() {
    12.                 @Override
    13.                 public void onClick(View v)
    14.                 {
    15.                     turnOffLed();   //method to turn off
    16.                 }
    17.             });
    18.    
    19.    
    20.      private void turnOffLed()
    21.         {
    22.             if (btSocket!=null)
    23.             {
    24.                 try
    25.                 {
    26.                     btSocket.getOutputStream().write("3".toString().getBytes());
    27.                 }
    28.                 catch (IOException e)
    29.                 {
    30.                     msg("Error");
    31.                 }
    32.             }
    33.         }
    34.    
    35.         private void turnOnLed()
    36.         {
    37.             if (btSocket!=null)
    38.             {
    39.                 try
    40.                 {
    41.                     btSocket.getOutputStream().write("4".toString().getBytes());
    42.                 }
    43.                 catch (IOException e)
    44.                 {
    45.                     msg("Error");
    46.                 }
    47.             }
    48.         }
    49.  
     



    1. Download the Forums for Android™ app!


      Download

       
Loading...

Share This Page

Loading...