2016-11-30 28 views
0

我需要知道如何在兩臺設備之間使用藍牙連接和發送android中的數據。目前我唯一知道的是如何打開並找到藍牙設備。如何在兩臺設備之間使用藍牙連接和發送android數據?

我正在製作一個使用藍牙的兩個設備之間播放的小視頻遊戲,但我不明白如何使它們之間的連接,如何使用bluetoothSockets,bluetoothServerSocket和androids給我帶來的線程。

這爲我所做的代碼:

public class MainActivity extends AppCompatActivity { 

    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

    static ListView dispositivos; 

    ArrayList<String> adapter=new ArrayList(); 
    ArrayAdapter<String> adap; 

    private static final int REQUEST_CONNECT_DEVICE_SECURE = 1; 
    private static final int REQUEST_CONNECT_DEVICE_INSECURE = 2; 
    private static final int REQUEST_ENABLE_BT = 3; 

    public void con(View view){ 
     adapter.clear(); 
     if (!mBluetoothAdapter.isEnabled()) { 
      Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
      startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 
     } 

     //checamos primero los dispositivos enlazados 
     Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); 
     if (pairedDevices.size() > 0) { 
      for (BluetoothDevice device : pairedDevices) { 
       adapter.add(device.getName() + "\n" + device.getAddress()); 
      } 
     } 


     //vamos a buscar otros dispositivos 
     mBluetoothAdapter.startDiscovery(); 
     IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
     registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy 

     adap=new ArrayAdapter<>(MainActivity.this,android.R.layout.simple_list_item_1, adapter); 
     dispositivos.setAdapter(adap); 

    } 


    //metodo de busqueda que agrega cada dispositivo que se encuentre a la lista 
    private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
       BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 

       adap.add(device.getName() + "\n" + device.getAddress()); 
      } 
     } 
    }; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     dispositivos=(ListView)findViewById(R.id.lista); 
    } 
} 
+0

已經看到了藍牙聊天示例應用程序:https://github.com/googlesamples/android-BluetoothChat –

回答

1

爲了建立兩個設備之間需要遵循一些步驟的藍牙連接和交換數據:

  1. 查找和對設備
  2. 從設備開始連接(BluetoothServerSocket
  3. 接受連接並創建雙向數據流

-1您曾說過,已經知道如何搜索設備,但here還有的文檔頁面。 如果目標設備尚未配對,你不必執行發現,只是要求BluetoohAdapter爲paired devices

-2藍牙連接必須從某個地方開始,這樣的設備具有inizialize它和行動作爲服務器;要做到這一點,你必須創建一個BluetoothServerSocket。 你可以找到一步一步的解釋here;基本上一旦你創建了它,這個服務器套接字將不斷監聽一個傳入連接的請求,如果該請求將被接受,則返回一個有效的BluetoothSocket。 請記住,連接的請求必須來自其他設備,以便智能手機有此職責,here一如既往,文檔。

-3使用兩個新的BluetoothSocket,您可以爲每個設備(輸入1和輸出1)檢索一對流。 現在你必須manage the connection發送和從流特定

重要接收數據:藍牙活動是沉重和異步所以必須進行關閉主線程。 創建Thread並重寫他的run()方法來執行的每一個動作:

  • 搜索

  • 偵聽傳入請求(服務器端)

  • 管理連接(兩側)

在我鏈接你的每個文檔段落的末尾可以找到一些代碼示例,教您如何執行該特定任務。

開始嘗試,如果出現錯誤或卡住了,請尋​​求幫助。

+0

你知道我可以如何請求其他設備? – Montero

+0

在我的答案的第2點閱讀第一個鏈接,在那裏解釋它的一切,有一個例子 – Marco

相關問題