简体   繁体   English

如何通过单击项目连接到列表视图中的配对蓝牙设备

[英]How to connect to a paired Bluetooth device in a List View by clicking the item

Alright so currently my app turns on bluetooth on my device and then lists all paired devices in a List View. 好吧,所以目前我的应用程序在我的设备上打开蓝牙,然后列出列表视图中的所有配对设备。 I am trying to make it so when the item in the list view is clicked it will connect to the device (primarily for bluetooth speakers). 我试图这样做,当单击列表视图中的项目时,它将连接到设备(主要用于蓝牙扬声器)。 Below i have listed my main java file with all the code that runs my app. 下面我列出了我的主java文件,其中包含运行我的应用程序的所有代码。 If anyone could get me going in the right direction id appreciate it. 如果有人能让我朝着正确的方向前进,我就会欣赏它。 Also this is my first project working with bluetooth. 这也是我的第一个使用蓝牙的项目。

package com.applie.itchaboynathan.appv2;

import android.support.v7.app.AppCompatActivity;
import java.io.IOException;
import java.net.Socket;
import java.util.UUID;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.view.MenuItem;
import android.widget.Toast;
import android.bluetooth.BluetoothAdapter;
import android.widget.SeekBar;
import android.widget.TextView;
import android.content.Intent;
import android.widget.ListView;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import java.util.ArrayList;
import android.widget.ArrayAdapter;
import java.util.Set;
import android.os.Handler;


public class MainActivity extends AppCompatActivity {

    private static SeekBar seek_bar;
    private static TextView text_view;
    private BluetoothAdapter BA;
    private Set<BluetoothDevice>pairedDevices;
    Handler handler = new Handler();
    ListView lv;
    ImageView iv;

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

        volumeBar();
        BA = BluetoothAdapter.getDefaultAdapter();
        lv = (ListView)findViewById(R.id.deviceList);
        iv = (ImageView)findViewById(R.id.imgConnection);

        //define menu button
        ImageButton menubutton = (ImageButton)findViewById(R.id.ibtnMenu);
        //enables the button to show a menu
        menubutton.setOnClickListener(new View.OnClickListener()

        {
            @Override
                    public void onClick(View v){
                    final PopupMenu popupMenu = new PopupMenu(getApplicationContext(),v);

                    popupMenu.inflate(R.menu.main_menu);
                popupMenu.show();


                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

                @Override
                    public boolean onMenuItemClick(MenuItem item){

                    switch (item.getItemId()) {
                        case R.id.connect:
                            //code for connect item
                            //Delay so the list creates
                            handler.postDelayed(new Runnable() {
                                @Override
                                public void run(){
                                    list();
                                    visible();
                                    iv.setImageResource(R.mipmap.ic_checked);
                                }
                            }, 4200);
                            turnOn();

                            return true;
                        case R.id.disconnect:
                            //code for music item
                            turnOff();
                            iv.setImageResource(R.mipmap.ic_disconnected);
                            listClear();
                            return true;
                        case R.id.music:
                            //code for music item
                            return true;
                        case R.id.play:
                            //code for play item
                            return true;
                        case R.id.pause:
                            //code for pause item

                            return true;

                    }
                    return false;
                }
                });
        }
    });//end of button

}
    //bluettoth enabler
    public void turnOn(){
        if (!BA.isEnabled()) {
            Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(turnOn, 0);
            Toast.makeText(getApplicationContext(), "Turned on",Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "Already on", Toast.LENGTH_LONG).show();
        }
    }
    //bluetooth disable
    public void turnOff(){
        BA.disable();
        Toast.makeText(getApplicationContext(), "Turned off" ,Toast.LENGTH_LONG).show();
    }

    public  void visible(){
        Intent getVisible = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
        startActivityForResult(getVisible, 0);
    }

    public void listClear(){
        lv.setAdapter(null);
    }
    public void list(){
        pairedDevices = BA.getBondedDevices();

        ArrayList list = new ArrayList();

        for(BluetoothDevice bt : pairedDevices) list.add(bt.getName());
        Toast.makeText(getApplicationContext(), "Showing Paired Devices",Toast.LENGTH_SHORT).show();

        final ArrayAdapter adapter = new  ArrayAdapter(this,android.R.layout.simple_list_item_1, list);

        lv.setAdapter(adapter);
    }

    //volume bar code
    public void volumeBar(){
        seek_bar = (SeekBar)findViewById(R.id.seekBar);
        text_view =(TextView)findViewById(R.id.txtVolumeLvl);
        text_view.setText("Volume : " + seek_bar.getProgress() + " % ");

        seek_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
            int progress_value;
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                progress_value = progress;
                text_view.setText("Volume : " + progress +  " % ");


            }


            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                text_view.setText("Volume : " + progress_value + " % ");

            }
        }
        );
    }
    //end volume bar

    }

You have use BluetoothSocket for connecting bluetooth. 您已使用BluetoothSocket连接蓝牙。

use the below code to connect. 使用以下代码进行连接。

 private BluetoothAdapter mBluetoothAdarpter;
 private BluetoothSocket mBtSocket;
 private BluetoothDevice mBTDevice;
 private static final UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
 ..
 ..
 private boolean connectToDevice(String iAdress) {
    try {
        if(mBluetoothAdarpter == null) mBluetoothAdarpter = BluetoothAdapter.getDefaultAdapter();
        mBTDevice = mBluetoothAdarpter.getRemoteDevice(iAdress);
        mBtSocket = mBTDevice.createRfcommSocketToServiceRecord(SPP_UUID);
        mBtSocket.connect();
        return true;
    } catch (IOException e) {
        e.printStackTrace();

    } catch (Exception e) {
        e.printStackTrace();

    }
    return false;
}

Try this: 尝试这个:

          ArrayList list = new ArrayList();         
          public void list(){
                    pairedDevices = BA.getBondedDevices();               

                for(BluetoothDevice bt : pairedDevices) list.add(bt.getName());
                Toast.makeText(getApplicationContext(), "Showing Paired Devices",Toast.LENGTH_SHORT).show();

                final ArrayAdapter adapter = new  ArrayAdapter(this,android.R.layout.simple_list_item_1, list);

                lv.setAdapter(adapter);

               lv.setOnItemClickListener(new AdapterView.OnItemClickListener () {
               @Override
               public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                  String selected = list.get(position);
                  for (Iterator<BluetoothDevice> it = pairedDevices.iterator(); it.hasNext(); ) {
                      BluetoothDevice bt = it.next();
                      if (bt.getName().equals(selected){
                      //connect to device
                      }                       
                  }
              });
          }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM