Bluetooth 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;

java.util.UUID import;

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; // broadcast receiver

    private ConnectThreadmConnectThread; // client thread

    private AcceptThreadmAcceptThread; // server thread

    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; // Open

//    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. Registration Bluetooth radio

        mReceiver =new BlueToothStateReceiver();

        IntentFilter filter =new IntentFilter();

        filter.addAction (BluetoothDevice.ACTION_FOUND); // search more to Bluetooth

        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. The device does not support Bluetooth, the end of the application

        if (mBluetoothAdapter ==null) {

finish();

return;

        }

// 2. Bluetooth determine whether to open

        if (!mBluetoothAdapter.enable()) {

// request to open not open

            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 {

// get socket

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

                    Use the following //mDevice.createRfcommSocketToServiceRecord(UUID.fromString(BT_UUID));//sdk 2.3

                    mSocket = temp;

                    // sends a connection request

                    if (mSocket !=null) {

mSocket.connect();

                    }

sendHandlerMsg ( "connect" + mDevice.getName () + "Success!");

                    // get the input and output streams

                    btIs =mSocket.getInputStream();

                    btOs =mSocket.getOutputStream();

                    // Communication - receiving messages

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

                    String content =null;

                    while (canRecv) {

content = reader.readLine();

                        sendHandlerMsg ( "receive the message:" + content);

                    }

}catch (IOException e) {

e.printStackTrace ();

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

                }finally {

try {

if (mSocket !=null) {

mSocket.close();

                        }

//btIs.close();// two output streams rely socket, the socket is closed to

//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, "triggering broadcasting", 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) {

// find a Bluetooth device

                        Log.e ( "wcm", "find Bluetooth:");

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

                  }

break;

                case BluetoothAdapter.ACTION_DISCOVERY_FINISHED:

Log.e ( "wcm", "End Search");

// Toast.makeText (getApplicationContext (), "the search ends", Toast.LENGTH_SHORT) .show ();

// mMessageAdapter.addMessage ( "End Search");

//                    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 {

// get socket

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

                mServerSocket = temp;

                // listens for connection requests - as a test, only one device is connected

                if (mServerSocket !=null) {

// while (canAccept) {

                    mSocket =mServerSocket.accept();

                    sendHandlerMsg ( "client connection");

                    // }

                }

// get the input and output streams

                btIs =mSocket.getInputStream();

                btOs =mSocket.getOutputStream();

                // Communication - receiving messages

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

                String content =null;

                while (canRecv) {

content = reader.readLine();

                    sendHandlerMsg ( "receive the message:" + content);

                }

}catch (IOException e) {

e.printStackTrace ();

            }finally {

try {

if (mSocket !=null) {

mSocket.close();

                    }

// btIs.close (); // two output streams rely socket, the socket is closed to

// 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());

                }

}

}

}

}

Guess you like

Origin blog.csdn.net/weixin_34129696/article/details/90866692
Recommended