Android蓝牙列表和配对请求发送

时间:2014-02-20 04:50:43

标签: android android-listview bluetooth

我想在android中搜索和列出蓝牙设备,我的程序现在能够列出所有活动设备但不能将配对请求发送到其他设备。我想实现这个onItemClick列表元素。还有蓝牙没有启用我的设备,然后显示对活动设备的权限,如果我去是的那么好,但如果我去没有然后许可再次显示,直到我按是..我可以这样做吗?plz帮助代码..这是我的代码..

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;

      /** 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 {
            Intent enableBtIntent = new Intent(btAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
          }
        }
      }

      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();
                   }

                 }
               }
             }
           }
          }
        }
      };
}  

1 个答案:

答案 0 :(得分:0)

由于蓝牙正在使用串行端口并使用串行端口在两台设备之间进行通信,因此需要 UUID(通用唯一标识符)

因为你没有提到任何UUID所以你无法通过蓝牙进行通信。

根据您的要求,Android-SDK中提供了安全和非安全设备的蓝牙聊天简单而最好的示例

Bluetooth-Chat Source Code