【问题标题】:How to Send/receive string via bluetooth android to another android phone如何通过蓝牙 android 向另一部 android 手机发送/接收字符串
【发布时间】:2013-06-06 07:26:02
【问题描述】:

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

    };


}

【问题讨论】:

    标签: android


    【解决方案1】:

    如果您通过蓝牙发送,您需要创建一个 UUID 对象并使用它来打开套接字连接。我用一个线程来监听即将到来的数据。您还需要一个函数来打开和关闭蓝牙连接。

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

    【讨论】:

      猜你喜欢
      • 2012-02-13
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      • 2014-05-18
      • 1970-01-01
      相关资源
      最近更新 更多