蓝牙

MyBluetooth继承Thread,用Thread监听数据的接收并处理

想要通过蓝牙通信,首先需要打开蓝牙,然后与蓝牙匹配,最后建立通信连接

打开蓝牙:

调用startActivityForResult()并使用ACTION_REQUEST_ENABLE方法,这将发出一个请求来利用系统设置开启蓝牙

Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(turnOn, 0);//打开蓝牙,状态改变,在注册事件中show Toast
IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
registerReceiver(receiver, filter);//注册蓝牙连接状态改变事件

蓝牙匹配:

搜索获取周围蓝牙设备列表->显示并选择配对的设备

Set<BluetoothDevice>pairedDevices;
pairedDevices=mybluetooth.getpairedDevices();//搜索获取周围蓝牙设备列表
if(pairedDevices.size()<=0)
	//没有可连接的设备.
else{
	int i=0;
	final String[] Devicesname = new String[pairedDevices.size()]; 
	final String[] Devicesadress = new String[pairedDevices.size()]; 
	for(BluetoothDevice bt : pairedDevices)
	{
		Devicesname[i]=bt.getName();
		Devicesadress[i]=bt.getAddress();
		i++;
	}
	AlertDialog.Builder builder = new Builder(MainActivity.this);
	builder.setTitle("选择配对的设备");
	builder.setItems(Devicesname, new OnClickListener()
	{
		@Override
		public void onClick(DialogInterface dialog, int which) {
		// TODO Auto-generated method stub
		if(which>=0)
		{
			mybluetooth.setDevice(BA.getRemoteDevice(Devicesadress[which]));
			if(mybluetooth.getDevicename()==null)
			DisplayToast("无法与"+Devicesname[which]+"进行连接.");
			else mybluetooth.buildconnection(0);
		}
		}
	});
	builder.show();
}

几个月没碰Android Studio,自己都看不懂自己的代码了,我也不知道我写的是什么,贴出来证明我还活着

public class MyBluetooth extends Thread{

private BluetoothAdapter BA= BluetoothAdapter.getDefaultAdapter();//获取本机蓝牙

private SetpairedDevices; //pairedDevices(用于存放搜索得到的蓝牙设备集合)

private BluetoothDevice Device; //Device(将要连接的蓝牙设备)

private BluetoothSocket clientSocket; //建立BluetoothSocket 通信

//该UUID表示串口服务(!!!这个十分重要)

private final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

private Handler myHandler;

public MyBluetooth(Handler myHandler)

{

this.myHandler=myHandler;

pairedDevices=BA.getBondedDevices();

}

public String getmacadress(){

return Device.getAddress();

}

public String getDevicename(){

return Device.getName();

}

public Set getpairedDevices(){

return pairedDevices;

}

public void setDevice(BluetoothDevice bluetoothdevice){

Device=bluetoothdevice;

}

  public boolean senddata(int dat)

  {

  if(!clientSocket.isConnected())

  {

  return false;

  }

  try {

OutputStream os = clientSocket.getOutputStream();

os.write(dat);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return true;

  }

public void buildconnection(int type)

{

try {

clientSocket = Device.createRfcommSocketToServiceRecord(MY_UUID);

if(!clientSocket.isConnected())  

clientSocket.connect();

OutputStream os = clientSocket.getOutputStream();

InputStream is = clientSocket.getInputStream();

int a=0xff;

byte b=(byte)a;

os.write(b);

if(type==1)//type==1与单片机连接

if(is.read()!=255)//单片机连接后,单片机回发0xff

{

isStable=false;

return ;

}

socket.start();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Override

    public void run(){

try {

InputStream is = clientSocket.getInputStream();

OutputStream os = clientSocket.getOutputStream();

Bundle bundle= new Bundle();// 存放Message数据

Message msg;

while(true)

{

msg = new Message();//每次读取信息都要新建Message,不然会报错!!!!!!!!

int which=is.read();

switch(which)

{

case 0x01://which=0x01单片机发送未处理的温度测量值

int t;

byte[] b=new byte[2];

is.read(b);

t=b[0] & 0xff;

t<<=8;

t|=b[1] & 0xff;

double temp=0;

if(t< 0) //为负数,需要-1,取反

{

t=t-1;

t=~t;

temp=t*0.0625;

}

else

{

temp=t*0.0625;

}

bundle.putString("temp",String.valueOf(temp));//数据存入bundle

msg.what=0x01;

msg.setData(bundle);//设置msg的数据

myHandler.sendMessage(msg); //数据传递至MainActivity的myHandler

break;

default://纯文本信息,不处理

msg.what=0xff;

bundle= new Bundle();// 存放Message数据

bundle.putChar("textinfo", (char)which);

msg.setData(bundle);

myHandler.sendMessage(msg);

}

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}



 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值