蓝牙demo

package com.example.bluethooth;

import android.Manifest;

import android.annotation.SuppressLint;

import android.bluetooth.BluetoothAdapter;

import android.bluetooth.BluetoothDevice;

import android.bluetooth.BluetoothServerSocket;

import android.bluetooth.BluetoothSocket;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.DialogInterface;

import android.content.Intent;

import android.content.IntentFilter;

import android.os.Build;

import android.os.Handler;

import android.os.Message;

import android.support.annotation.Nullable;

import android.support.v7.app.AlertDialog;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

import java.util.AbstractList;

import java.util.ArrayList;

import java.util.List;

import java.util.Set;

import java.util.UUID;

public class MainActivityextends AppCompatActivity {

public static final int REQUEST_BT_ENABLE_CODE =200;

    public static final StringBT_UUID ="00001101-0000-1000-8000-00805F9B34FB";//uuid

    private static final int REQUEST_ENABLE_BT =331;

    private Buttonbluetooth;

    private  BluetoothAdaptermBluetoothAdapter;

    private BlueToothStateReceivermReceiver;//广播接收器

    private ConnectThreadmConnectThread; //客户端线程

    private AcceptThreadmAcceptThread; //服务端线程

    private static HandlermHandler =new Handler() {

@Override

        public void dispatchMessage(Message msg) {

//            mMessageAdapter.addMessage((String) msg.obj);

            Log.e("wcm msg:",msg.obj.toString());

        }

};

    private ListmArrayAdapter;

    private ButtonstartBtn;//打开

//    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {

//        public void onReceive(Context context, Intent intent) {

//            String action = intent.getAction();

//            // When discovery finds a device

//            if (BluetoothDevice.ACTION_FOUND.equals(action)) {

//                // Get the BluetoothDevice object from the Intent

//                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

//                // Add the name and address to an array adapter to show in a ListView

//                mArrayAdapter.add(device.getName() + "\n" + device.getAddress());

//            }

//        }

//    };

    @Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        startBtn =(Button)findViewById(R.id.button2);

        startBtn.setOnClickListener(new View.OnClickListener() {

@Override

            public void onClick(View v) {

if (mAcceptThread==null)

{

mAcceptThread=new AcceptThread();

                }

mAcceptThread.start();

            }

});

        bluetooth = (Button)findViewById(R.id.button);

        mArrayAdapter=new ArrayList<>();

        mBluetoothAdapter =BluetoothAdapter.getDefaultAdapter();

        bluetooth.setOnClickListener(new View.OnClickListener() {

@Override

            public void onClick(View v) {

if (mBluetoothAdapter==null) {

openBT();

                }

mBluetoothAdapter.startDiscovery();

            }

});

        registerRec();

    }

@Override

    protected void onDestroy() {

super.onDestroy();

        unregisterReceiver(mReceiver);

    }

private void registerRec() {

//3.注册蓝牙广播

        mReceiver =new BlueToothStateReceiver();

        IntentFilter filter =new IntentFilter();

        filter.addAction(BluetoothDevice.ACTION_FOUND);//搜多到蓝牙

        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);//搜索结束

        registerReceiver(mReceiver, filter);

    }

@Override

    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

super.onActivityResult(requestCode, resultCode, data);

        if (requestCode==REQUEST_ENABLE_BT)

{

if (resultCode==RESULT_OK)

{

openBT();

            }

}

}

@SuppressLint("MissingPermission")

private void openBT() {

if (mBluetoothAdapter ==null) {

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

        }

//1.设备不支持蓝牙,结束应用

        if (mBluetoothAdapter ==null) {

finish();

return;

        }

//2.判断蓝牙是否打开

        if (!mBluetoothAdapter.enable()) {

//没打开请求打开

            Intent btEnable =new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

            startActivityForResult(btEnable, REQUEST_BT_ENABLE_CODE);

        }

}

class ConnectThreadextends Thread {

private BluetoothDevicemDevice;

        private BluetoothSocketmSocket;

        private InputStreambtIs;

        private OutputStreambtOs;

        private boolean canRecv;

        private PrintWriterwriter;

        public ConnectThread(BluetoothDevice device) {

mDevice = device;

            canRecv =true;

        }

@Override

        public void run() {

if (mDevice !=null) {

try {

//获取套接字

                    @SuppressLint("MissingPermission") BluetoothSocket temp =mDevice.createInsecureRfcommSocketToServiceRecord(UUID.randomUUID());

                    //mDevice.createRfcommSocketToServiceRecord(UUID.fromString(BT_UUID));//sdk 2.3以下使用

                    mSocket = temp;

                    //发起连接请求

                    if (mSocket !=null) {

mSocket.connect();

                    }

sendHandlerMsg("连接 " +mDevice.getName() +"成功!");

                    //获取输入输出流

                    btIs =mSocket.getInputStream();

                    btOs =mSocket.getOutputStream();

                    //通讯-接收消息

                    BufferedReader reader =new BufferedReader(new InputStreamReader(btIs, "UTF-8"));

                    String content =null;

                    while (canRecv) {

content = reader.readLine();

                        sendHandlerMsg("收到消息:" + content);

                    }

}catch (IOException e) {

e.printStackTrace();

                    sendHandlerMsg("错误:" + e.getMessage());

                }finally {

try {

if (mSocket !=null) {

mSocket.close();

                        }

//btIs.close();//两个输出流都依赖socket,关闭socket即可

//btOs.close();

                    }catch (IOException e) {

e.printStackTrace();

                        sendHandlerMsg("错误:" + e.getMessage());

                    }

}

}

}

private void sendHandlerMsg(String content) {

Message msg =mHandler.obtainMessage();

            msg.what =1001;

            msg.obj = content;

            mHandler.sendMessage(msg);

        }

public void write(String msg) {

if (btOs !=null) {

try {

if (writer ==null) {

writer =new PrintWriter(new OutputStreamWriter(btOs, "UTF-8"), true);

                    }

writer.println(msg);

                }catch (UnsupportedEncodingException e) {

e.printStackTrace();

                    writer.close();

                    sendHandlerMsg("错误:" + e.getMessage());

                }

}

}

}

class BlueToothStateReceiverextends BroadcastReceiver {

@SuppressLint("MissingPermission")

@Override

        public void onReceive(Context context, Intent intent) {

// Toast.makeText(MainActivity.this, "触发广播", Toast.LENGTH_SHORT).show();

            String action = intent.getAction();

            switch (action) {

case BluetoothDevice.ACTION_FOUND:

BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                    //  Toast.makeText(MainActivity.this, "找到设备" + device.getName(), Toast.LENGTH_SHORT).show();

                    if (device !=null) {

//找到蓝牙设备

                        Log.e("wcm","找到蓝牙:");

//                        Toast.makeText(getApplicationContext(),"蓝牙:"+device.getAddress()+" name:"+device.getName(),Toast.LENGTH_SHORT).show();

                  }

break;

                case BluetoothAdapter.ACTION_DISCOVERY_FINISHED:

Log.e("wcm","搜索结束");

//                    Toast.makeText(getApplicationContext(),"搜索结束",Toast.LENGTH_SHORT).show();

//                    mMessageAdapter.addMessage("搜索结束");

//                    mBluetoothAdapter.cancelDiscovery();

                    break;

            }

}

}

class AcceptThreadextends Thread {

private BluetoothServerSocketmServerSocket;

        private BluetoothSocketmSocket;

        private InputStreambtIs;

        private OutputStreambtOs;

        private PrintWriterwriter;

        private boolean canAccept;

        private boolean canRecv;

        public AcceptThread() {

canAccept =true;

            canRecv =true;

        }

@Override

        public void run() {

try {

//获取套接字

                BluetoothServerSocket temp =mBluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord("TEST_wcm2", UUID.randomUUID());

                mServerSocket = temp;

                //监听连接请求 -- 作为测试,只允许连接一个设备

                if (mServerSocket !=null) {

// while (canAccept) {

                    mSocket =mServerSocket.accept();

                    sendHandlerMsg("有客户端连接");

                    // }

                }

//获取输入输出流

                btIs =mSocket.getInputStream();

                btOs =mSocket.getOutputStream();

                //通讯-接收消息

                BufferedReader reader =new BufferedReader(new InputStreamReader(btIs, "UTF-8"));

                String content =null;

                while (canRecv) {

content = reader.readLine();

                    sendHandlerMsg("收到消息:" + content);

                }

}catch (IOException e) {

e.printStackTrace();

            }finally {

try {

if (mSocket !=null) {

mSocket.close();

                    }

// btIs.close();//两个输出流都依赖socket,关闭socket即可

// btOs.close();

                }catch (IOException e) {

e.printStackTrace();

                    sendHandlerMsg("错误:" + e.getMessage());

                }

}

}

private void sendHandlerMsg(String content) {

Message msg =mHandler.obtainMessage();

            msg.what =1001;

            msg.obj = content;

            mHandler.sendMessage(msg);

        }

public void write(String msg) {

if (btOs !=null) {

try {

if (writer ==null) {

writer =new PrintWriter(new OutputStreamWriter(btOs, "UTF-8"), true);

                    }

writer.println(msg);

                }catch (UnsupportedEncodingException e) {

e.printStackTrace();

                    writer.close();

                    sendHandlerMsg("错误:" + e.getMessage());

                }

}

}

}

}

猜你喜欢

转载自blog.csdn.net/weixin_34129696/article/details/90866692
今日推荐