Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过蓝牙android向另一部android手机发送/接收字符串_Android - Fatal编程技术网

如何通过蓝牙android向另一部android手机发送/接收字符串

如何通过蓝牙android向另一部android手机发送/接收字符串,android,Android,在我的android应用程序中,我想通过蓝牙将字符串从一个设备发送到另一个设备。 可用设备显示在列表视图中…。我想在没有配对的情况下发送字符串…我无法在设备之间建立连接…有人能帮我建立连接并发送字符串吗…我有很多示例,但无法确定文件传输需要哪些内容。如果有人已经这样做了,请帮助我。下面给出了未完成的代码 public class MainActivity extends Activity { ToggleButton tb1; Button tb2, tb3; Str

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

    };


}
公共类MainActivity扩展活动
{
切换按钮tb1;
按钮tb2、tb3;
字符串tbstate1、tbstate2、tbstate3;
EditText-textPhoneNo,textTo;
蓝牙适配器myBTadapter;
ArrayAdapter btArrayAdapter;
字符串状态;
ListView listDevicesFound;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tb1=(切换按钮)findViewById(R.id.m_m_btn);
tb2=(按钮)findViewById(R.id.sms\U btn);
tb3=(按钮)findViewById(R.id.email\u btn);
myBTadapter=BluetoothAdapter.getDefaultAdapter();
listDevicesFound=(ListView)findViewById(R.id.devicesfound);
btArrayAdapter=newarrayadapter(MainActivity.this,android.R.layout.simple\u list\u item\u 1);
listDevicesFound.setAdapter(btArrayAdapter);
//listDevicesFound.setAdapter(detectedAdapter);
//listDevicesFound=新建ListItemClicked();
//detectedAdapter.notifyDataSetChanged();
//      
registerReceiver(ActionFoundReceiver,新的IntentFilter(BluetoothDevice.ACTION_-FOUND));
tb1.setOnClickListener(新的OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
tbstate=tb1.getText().toString();
如果(tbstate.equals(“ON”))
{
if(myBTadapter==null)
{
tb1.设置启用(假);
}
其他的
{
if(myBTadapter.isEnabled())
{
myBTadapter.startDiscovery();
//Toast.makeText(getApplicationContext(),“Bluetooth 1”,Toast.LENGTH_LONG.show();
//myBTadapter.disable();
}
其他的
{
myBTadapter.enable();
myBTadapter.startDiscovery();
//Toast.makeText(getApplicationContext(),“Bluetooth 2”,Toast.LENGTH_LONG.show();
}
}
//检查状态并设置按钮文本
//相应地
}
其他的
{
myBTadapter.disable();
btArrayAdapter.clear();
/*if(myBTadapter.isEnabled())
{
myBTadapter.disable();
}
其他的
{
Toast.makeText(getApplicationContext(),“Bluetooth 3”,Toast.LENGTH_LONG.show();
}   */
} 
}
}
);
}
private final BroadcastReceiver ActionFoundReceiver=new BroadcastReceiver()
{
@凌驾
公共void onReceive(上下文、意图)
{
//TODO自动生成的方法存根
String action=intent.getAction();
if(BluetoothDevice.ACTION_FOUND.equals(ACTION))
{
BluetoothDevice=intent.getParcelableExtra(BluetoothDevice.EXTRA\u设备);
添加(device.getName()+“\n”+device.getAddress());
btArrayAdapter.notifyDataSetChanged();
}
}
};
}

如果通过蓝牙发送,则需要创建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");
}
void openBT()引发IOException{
UUID UUID=UUID.fromString(“000011101-0000-1000-8000-00805f9b34fb”);//标准//串行端口服务ID
mmSocket=mmDevice.createRfcommSocketToServiceRecord(uuid);
mmSocket.connect();
mmOutputStream=mmSocket.getOutputStream();
mmInputStream=mmSocket.getInputStream();
beginListenForData();
myLabel.setText(“蓝牙打开”);
}
void beginListenForData(){
最终处理程序=新处理程序();
final byte delimiter=10;//这是换行符的ASCII码
stopWorker=false;
readBufferPosition=0;
readBuffer=新字节[1024];
workerThread=新线程(new Runnable()){
公开募捐{
而(!Thread.currentThread().isInterrupted()&&!stopWorker){
试一试{
int bytesavable=mmInputStream.available();
如果(字节可用>0){
byte[]packetBytes=新字节[bytesAvailable];
mmInputStream.read(packetBytes);
对于(int i=0;i