2013-06-06 1 views
3

В моем приложении для Android я хочу отправить строку с одного устройства на другое через Bluetooth. Доступные устройства отображаются в виде списка .... Я хочу отправить строку без спаривания ... Мне не удалось установить соединение между устройствами ... Может ли кто-нибудь помочь мне установить соединение и отправить строку ... У меня есть много примеров, но не могу понять, что нужно для передачи файлов , если кто-нибудь это сделает, то мне поможет. Незаконченный код приведен нижеКак отправить/получить строку через Bluetooth android на другой телефон Android

public class MainActivity extends Activity 
{ 

    ToggleButton tb1; 
    Button tb2, tb3; 
    String tbstate1, tbstate2, tbstate3; 
    EditText textPhoneNo, textTo; 
    BluetoothAdapter myBTadapter; 
    ArrayAdapter<String> btArrayAdapter; 
    String tbstate; 
    ListView listDevicesFound; 

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

     tb1 = (ToggleButton) findViewById(R.id.m_m_btn); 
     tb2 = (Button) findViewById(R.id.sms_btn); 
     tb3 = (Button) findViewById(R.id.email_btn); 




     myBTadapter = BluetoothAdapter.getDefaultAdapter(); 


     listDevicesFound = (ListView) findViewById(R.id.devicesfound); 
     btArrayAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1); 
     listDevicesFound.setAdapter(btArrayAdapter); 

//  listDevicesFound.setAdapter(detectedAdapter); 
//  listDevicesFound = new ListItemClicked(); 
//  detectedAdapter.notifyDataSetChanged(); 
//  

     registerReceiver(ActionFoundReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND)); 



       tb1.setOnClickListener(new OnClickListener() 
       { 
        @Override 
        public void onClick(View v) 
        { 
         tbstate = tb1.getText().toString(); 
         if (tbstate.equals("ON")) 
         { 
          if (myBTadapter == null) 
          { 
           tb1.setEnabled(false); 

          } 
          else 
          { 
           if (myBTadapter.isEnabled()) 

           { 
            myBTadapter.startDiscovery(); 

           // Toast.makeText(getApplicationContext(), "Bluetooth 1 ",Toast.LENGTH_LONG).show(); 

            //myBTadapter.disable(); 
           } 

           else 
           { 

            myBTadapter.enable(); 
            myBTadapter.startDiscovery(); 

            //Toast.makeText(getApplicationContext(), "Bluetooth 2 ",Toast.LENGTH_LONG).show(); 

           } 


          } 


          // check the status and set the button text 
          // accordingly 

           } 
         else 
         { 
          myBTadapter.disable(); 
          btArrayAdapter.clear(); 
          /*if (myBTadapter.isEnabled()) 

          { 
           myBTadapter.disable(); 
          } 
          else 
          { 
           Toast.makeText(getApplicationContext(), "Bluetooth 3 ",Toast.LENGTH_LONG).show(); 
          } */ 
         } 

        } 
       } 
       ); 

      } 



    private final BroadcastReceiver ActionFoundReceiver = new BroadcastReceiver() 
    { 

     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      // TODO Auto-generated method stub 
      String action = intent.getAction(); 
      if (BluetoothDevice.ACTION_FOUND.equals(action)) 
      { 
       BluetoothDevice device = intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
       btArrayAdapter.add(device.getName() + "\n"+ device.getAddress()); 
       btArrayAdapter.notifyDataSetChanged(); 
      } 
     } 

    }; 


} 

ответ

5

Если вы отправляете через Bluetooth, необходимо создать объект UUID и использовать его, чтобы открыть подключение к сокету. Я использовал поток для прослушивания в следующих данных. вам также понадобится функция для открытия и закрытия соединения Bluetooth.

void openBT() throws IOException { 
    UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); //Standard    //SerialPortService ID 
    mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);  
    mmSocket.connect(); 
    mmOutputStream = mmSocket.getOutputStream(); 
    mmInputStream = mmSocket.getInputStream(); 
    beginListenForData(); 
    myLabel.setText("Bluetooth Opened"); 
} 

void beginListenForData() { 
    final Handler handler = new Handler(); 
    final byte delimiter = 10; //This is the ASCII code for a newline character 

    stopWorker = false; 
    readBufferPosition = 0; 
    readBuffer = new byte[1024]; 
    workerThread = new Thread(new Runnable() { 
      public void run() { 
       while(!Thread.currentThread().isInterrupted() && !stopWorker) { 
        try { 
         int bytesAvailable = mmInputStream.available();    
         if(bytesAvailable > 0) { 
         byte[] packetBytes = new byte[bytesAvailable]; 
         mmInputStream.read(packetBytes); 
         for(int i=0;i<bytesAvailable;i++) { 
          byte b = packetBytes[i]; 
          if(b == delimiter) { 
            byte[] encodedBytes = new byte[readBufferPosition]; 
            System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length); 
            final String data = new String(encodedBytes, "US-ASCII"); 
            readBufferPosition = 0; 

            handler.post(new Runnable() { 
             public void run() { 
              myLabel.setText(data); 
             } 
            }); 
          }else { 
            readBuffer[readBufferPosition++] = b; 
          } 
         } 
        } 
       }catch (IOException ex) { 
        stopWorker = true; 
       } 
     } 
    } 
}); 

workerThread.start(); 
} 

void sendData() throws IOException { 
    String msg = myTextbox.getText().toString(); 
    msg += "\n"; 
    //mmOutputStream.write(msg.getBytes()); 
    mmOutputStream.write('A'); 
    myLabel.setText("Data Sent"); 
} 
+1

над кодом работает для одного способа связи .. ?? –

Смежные вопросы