Android想要将蓝牙配对请求发送到其他设备 [英] Android want to send bluetooth pair request to another devices

查看:61
本文介绍了Android想要将蓝牙配对请求发送到其他设备的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在android中搜索并列出蓝牙设备,我的程序现在能够列出所有活动设备,但无法向其他设备发送配对请求.我想实现list元素的onItemClick.未启用我的设备,然后显示对活动设备的许可,如果我选择是,则确定,但是如果我选择否,则再次显示许可,直到按yes ..我该怎么做?请使用代码帮助.这是我的代码.

i want to search and listing bluetooth devices in android, my program now able to list all the active devices but not able to send pairing request to the other devices .I want to implement this onItemClick of list element.And also if bluetooth is not enabled of my device then show a permission to active device,if i go for yes then ok,but if i go for no then permission show again until i press yes..how can i do this?plz help with code..here is my code..

public class Main extends Activity  {  
    TextView out;
      private static final int REQUEST_ENABLE_BT = 1;
      private BluetoothAdapter btAdapter; 
      private ArrayList<BluetoothDevice> btDeviceList = new ArrayList<BluetoothDevice>();
      private ArrayList<String> mylist= new ArrayList<String>();
      private ListView lv;
      private Button btn;
     public Parcelable[] uuidExtra;

      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

      }

      public void search(View view)
      {
          //Register the BroadcastReceiver
            IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
            filter.addAction(BluetoothDevice.ACTION_UUID);
            filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
            filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
            registerReceiver(ActionFoundReceiver, filter); // Don't forget to unregister during onDestroy

            // Getting the Bluetooth adapter
            btAdapter = BluetoothAdapter.getDefaultAdapter();
            Toast.makeText(getApplicationContext(),"\nAdapter: " + btAdapter,5000).show();

            CheckBTState();
      }

      private void setDeviceList(ArrayList<String> list) {
          lv = (ListView) findViewById(R.id.listView);
            ArrayAdapter<String> adapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
            lv.setAdapter(adapter);

    }

    /* This routine is called when an activity completes.*/
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_ENABLE_BT) {
          CheckBTState();
        }
      }

      @Override
      protected void onDestroy() {
        super.onDestroy();
        if (btAdapter != null) {
          btAdapter.cancelDiscovery();
        }
        unregisterReceiver(ActionFoundReceiver);
      }

      private void CheckBTState() {
        // Check for Bluetooth support and then check to make sure it is turned on
        // If it isn't request to turn it on
        // List paired devices
        // Emulator doesn't support Bluetooth and will return null
        if(btAdapter==null) { 
          Toast.makeText(getApplicationContext(),"\nBluetooth NOT supported. Aborting.",5000).show();
          return;
        } else {
          if (btAdapter.isEnabled()) {
            Toast.makeText(getApplicationContext(),"\nBluetooth is enabled...",5000).show();

            // Starting the device discovery
            btAdapter.startDiscovery();
          } else if (!btAdapter.isEnabled()){
            Intent enableBtIntent = new Intent(btAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
          }
         /* else{
              Intent intent = new Intent(btAdapter.ACTION_STATE_CHANGED);
            startActivityForResult(intent, RESULT_CANCELED);
          }*/
          }
      }

      private final BroadcastReceiver ActionFoundReceiver = new BroadcastReceiver(){

        @Override
        public void onReceive(Context context, Intent intent) {
         String action = intent.getAction();
         if(BluetoothDevice.ACTION_FOUND.equals(action)) {
           BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
           Toast.makeText(getApplicationContext(),"\n  Device: " + device.getName() + ", " + device,5000).show();
           mylist.add(device.getName());
           setDeviceList(mylist);
         } else {
           if(BluetoothDevice.ACTION_UUID.equals(action)) {
             BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
             Parcelable[] uuidExtra = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID);
             for (int i=0; i<uuidExtra.length; i++) {
               Toast.makeText(getApplicationContext(),"\n  Device: " + device.getName() + ", " + device + ", Service: " + uuidExtra[i].toString(),5000).show();
             }
           } else {
             if(BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
               Toast.makeText(getApplicationContext(),"\nDiscovery Started...",5000).show();
             } else {
               if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
                 Toast.makeText(getApplicationContext(),"\nDiscovery Finished",5000).show();
                 Iterator<BluetoothDevice> itr = btDeviceList.iterator();
                 while (itr.hasNext()) {
                   // Get Services for paired devices
                   BluetoothDevice device = itr.next();
                   Toast.makeText(getApplicationContext(),"\nGetting Services for " + device.getName() + ", " + device,5000).show();
                   if(!device.fetchUuidsWithSdp()) {
                     Toast.makeText(getApplicationContext(),"\nSDP Failed for " + device.getName(),5000).show();
                   }

                 }
               }
             }
           }
          }
        }
      };       

}  

推荐答案

为时已晚,但是这里是代码->您需要使用后台线程作为客户端与蓝牙设备连接.并且UUID是通用唯一标识,您可以使用在线UUID生成器.进行安全连接,然后将其插入设备插座并进行连接;

It's too late but here is code -> You need to use background thread to connect with bluetooth device as a client. and UUID is Universal Uniquely identification you can use online UUID generator. for secure connections and then get socket with device and connect with it;

ConnectWithDevice(context : ConnectWithBluetooth, device : BluetoothDevice) : Thread(){

    private val mContext : ConnectWithBluetooth = context
    private val mmSocket : BluetoothSocket
    private val mmDevice : BluetoothDevice
    // Default UUID
    private val mmDefaultUUID = UUID.fromString("78c374fd-f84d-4a9e-aa5b-9b0b6292952e")

    init {
        var temp : BluetoothSocket? = null
        mmDevice = device
        try {
            // Try here device.createInsecureConnect if it's work then start with this;
            temp = device.createRfcommSocketToServiceRecord(mmDevice.uuids[0].uuid)
        }catch (en : NullPointerException){
            en.printStackTrace()
            // Try here device.createInsecureConnect if it's work then start with this;
            temp = device.createRfcommSocketToServiceRecord(mmDefaultUUID)
        }catch (e : IOException){
            e.printStackTrace()
            Log.e("TAG","Socket's create() method failed",e)
        }
        mmSocket = temp!!
        Log.i("TAG","Got the Socket")
    }

    override fun run() {
        // Cancel discovery because it otherwise slows down the connection.
        if(mContext.bluetoothAdapter != null){
            mContext.bluetoothAdapter!!.cancelDiscovery()
        }

        try{
            // Connect to the remote device through the socket. This call blocks
            // until it succeeds or throws an exception.
            Log.i("TAG","Connecting...")
            mmSocket.connect()
            Log.i("TAG","Bluetooth Successfully Connected")
        }catch (connectException : IOException){
            // Unable to connect; close the socket and return.
            try{
                mmSocket.close()
            }catch (closeException : IOException){
                Log.e("TAG","Could not close the client socket",closeException)
            }
            return
        }
        // The connection attempt succeeded. Perform work associated with
        // the connection in a separate thread.
        Log.i("TAG","Device is Connected")
        //manageMyConnectedSocket(mmSocket)
    }

    // Closes the client socket and causes the thread to finish.
    // Call this method from the main activity to shut down the connection.
    fun cancel(){
        try {
            mmSocket.close()
        } catch (e: IOException) {
            Log.e(ContentValues.TAG, "Could not close the client socket", e)
        }
    }
}

这篇关于Android想要将蓝牙配对请求发送到其他设备的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆