蓝牙不写或永远不会读

时间:2017-06-25 11:53:14

标签: java android bluetooth

import android.annotation.TargetApi;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;

@TargetApi(18)
public class MainActivity extends AppCompatActivity{

`int b = 0;
BluetoothAdapter BA = BluetoothAdapter.getDefaultAdapter();
BluetoothDevice device;
BluetoothSocket BS;
BluetoothServerSocket server;
UUID uuid = UUID.fromString("f63b93f5-56e0-47bb-8972-996e34cfb9a8");`

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

    `Intent i = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivity(i);`

    `Accept accept = new Accept();
    accept.start();`

    Set<BluetoothDevice> devices = BA.getBondedDevices();
    for(BluetoothDevice bt : devices) {
        try {
            if (bt.getName().equals("Overlord")) {
                device = BA.getRemoteDevice(bt.getAddress());
                BS = device.createRfcommSocketToServiceRecord(uuid);
            } else if (bt.getName().equals("Huawei Y5")) {
                device = BA.getRemoteDevice(bt.getAddress());
                BS = device.createRfcommSocketToServiceRecord(uuid);
            }
        }catch(IOException IOE){}
    }
}

public interface MessageContents{
    int MSG_MESSAGE = 0;
}
Handler handler = new Handler(){
    public void handleMessage(Message msg) {
        TextView tx = (TextView)findViewById(R.id.textView2);
        switch(msg.what){
            case MessageContents.MSG_MESSAGE:
                byte[] readBuf = (byte[]) msg.obj;
                // construct a string from the valid bytes in the buffer
                String readMessage = new String(readBuf, 0, msg.arg1);
                Log.d("TAG", readMessage);
                tx.setText(readMessage);
                break;

            default:
                tx.setText("No text");
        }
    }
};



class Connect extends Thread{
    public void run(){
        try {
            try {
                    BS.connect();
                    Log.d("LOG", "  e");
                    Log.d("LOG", "r" + BS.isConnected());

                DataTransfer dataTransfer = new DataTransfer();
                dataTransfer.start();
                }catch(NullPointerException e){
                Log.d("LOG", "  meezaan");
            }
        }catch(IOException e){
            Log.d("LOG", "t");
        }
    }

}

class Accept extends Thread{

    public void run() {
        try {
            while (true) {
                server = BA.listenUsingRfcommWithServiceRecord("Secure Connection", uuid);
                server.accept();
                Log.d("LOG", "accept");
            }
        }catch(IOException E) {
        }
    }
}

class DataTransfer extends Thread{

    @Override
    public void run() {
        int d = 1;
        InputStream receive = null;
        Log.d("LOG", "On");
        int numBytes;
        byte[] buffer = new byte[1024];
        try {
            receive = BS.getInputStream();
            Log.d("LOG", "pn");
            while (BS.isConnected()) {
                try {
                    if (d <= 5) {
                        Log.d("LOG", "did");
                        ++d;
                    }
                    numBytes = receive.read(buffer);
                    handler.obtainMessage(MessageContents.MSG_MESSAGE, numBytes, -1, buffer).sendToTarget();
                } catch (NullPointerException e) {
                    Log.d("LOG", "error read(null)");
                }
            }
            Log.d("LOG", "pnA");
        } catch (IOException IOE) {
            Log.d("LOG", "error read(IOE)");
        }

    }
}

public void onOne(View view){
    write("1".getBytes());
}

public void onClick(View view){
    Button b1 = (Button) findViewById(R.id.button);
    EditText pin = (EditText) findViewById(R.id.editText);
    pin.setRawInputType(Configuration.KEYBOARD_QWERTY);
    pin.setVisibility(View.VISIBLE);
    b1.setVisibility(View.VISIBLE);

}

public void pin (View view) {
    Button b1 = (Button)findViewById(R.id.button);
    EditText pin = (EditText)findViewById(R.id.editText);
    String pin1 = pin.getText().toString();
    if (pin1.equals("")) {
        Connect connect = new Connect();
        connect.run();
        pin.setVisibility(View.INVISIBLE);
        b1.setVisibility(View.INVISIBLE);
    } else {
        Toast.makeText(getApplicationContext(), "Wrong Pin!"+pin1, Toast.LENGTH_SHORT).show();
        pin.setVisibility(View.INVISIBLE);
        b1.setVisibility(View.INVISIBLE);
    }
}

public void onTwo(View v){
    Toast.makeText(getApplicationContext(), "" + handler.hasMessages(MessageContents.MSG_MESSAGE) + " " + BS.isConnected(), Toast.LENGTH_SHORT).show();
}

public void write(byte[] Byte){
    try {
        OutputStream transfer = BS.getOutputStream();
        try {
            transfer.write(Byte);
        }catch(NullPointerException e){
            Log.d("LOG", "error write(null) " + BS.isConnected());}
    }catch (IOException IOE){ Log.d("LOG", "b");
        Log.d("LOG", "error write(IOE) " + BS.isConnected());}
}

}`

嗨,这是我的代码。写完Bytes[]后,我在第二台设备上收不到任何东西。当我删除'numBytes = receive.read(buffer)'处理程序将工作或显示

  

&#39;没有文字&#39;

我认为receive.read(buffer)等待输入意味着写入是问题或receive.read(buffer)是问题。请忽略名称,带有随机字母的日志或设备名称或不必要的导入或变量。谢谢:)抱歉,我没有时间缩进一切。如果你正在观看请放一些不知道的东西。谢谢。

0 个答案:

没有答案