蓝牙的进阶之路-扫描.链接.数据传输.手机和硬件的交互(一)

准备整理一下蓝牙的相关的东西 为自己的将来准备一下

废话不多说了啊   我会分几批把博客写完(代码量有点多,完全是自己写的适配所有的硬件设备)

首先从最开始写起 ----》》》》扫描 

先把权限配置好 避免后续问题的发生


蓝牙2.0扫描  有的人问了蓝牙4.0能不能用  回答你“能” 这个扫描虽然比不上4.0速度快但是这个效率比较高,4.0做了太多的无用功

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />


import android.annotation.SuppressLint;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Handler;

/**
 * Created by QQ:1187218985 on 2017/8/3.
 * SuppressLint 必须添加  否则无法适配低版本
 */
@SuppressLint("NewApi")
public class BlueToothManager {

    public static BlueToothManager mBlueToothManager=null;
    private Context mcontext;
    private ConverDevice mconverDevice;
    private BluetoothAdapter bluetoothAdapter;
    public static final int SCAN_ING  = 1;
    public static final int SCAN_DISING  = 2;
    private int curStatu = SCAN_DISING;
    //单利模式 一个对象 方便操作
    public static BlueToothManager getIntence(){
        if (mBlueToothManager==null){
            return mBlueToothManager=new BlueToothManager();
        }else{
            return mBlueToothManager;
        }
    }

    public void init(Context context,ConverDevice converDevice){
        this.mcontext=context;
        this.mconverDevice=converDevice;
        BluetoothManager bluetoothManager=(BluetoothManager)mcontext.getSystemService(Context.BLUETOOTH_SERVICE);
        bluetoothAdapter = bluetoothManager.getAdapter();
    }
    public void startScan(){
        if (!bluetoothAdapter.isEnabled()){
            bluetoothAdapter.enable();
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    startScan();
                }
            }, 3000);
            return;
        }
        mcontext.registerReceiver(mcast,getFIlter());
        bluetoothAdapter.startDiscovery();
        curStatu=  SCAN_ING;
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                if (curStatu==  SCAN_ING){
                    stopScan();
                    if (mconverDevice!=null){
                        mconverDevice.onTimeOut();
                    }
                }
            }
        }, 10000);
    }
    public void stopScan(){
        if (curStatu == BlueToothManager.SCAN_ING){
            mcontext.unregisterReceiver(mcast);
            bluetoothAdapter.cancelDiscovery();
            mconverDevice.onLeStop();
        }
        if(curStatu == SCAN_ING){
            curStatu = SCAN_DISING;
        }
    }
    BroadcastReceiver mcast=new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if("android.bluetooth.device.action.FOUND".equals(action)) {
                BluetoothDevice device = intent.getParcelableExtra("android.bluetooth.device.extra.DEVICE");
                mconverDevice.onLeScan(device.getName(),device.getAddress());
            }
        }
    };
    private IntentFilter getFIlter(){
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
        intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
        intentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
        intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
        return intentFilter;
    }
    public interface ConverDevice{
        void onLeScan(String name,String address);
        void onLeStop();
        void onTimeOut();
    }


}


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.example.gb_zx.myapplication.R;

public class BlueToothActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_start;
    private Button btn_stop;
    BlueToothManager blueToothManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_blue_tooth);
        blueToothManager=new BlueToothManager();
        blueToothManager.init(this,mconver);
        getViews();
    }
    private void getViews(){
        btn_start = ((Button) findViewById(R.id.btn_start));
        btn_start.setOnClickListener(this);
        btn_stop = ((Button) findViewById(R.id.btn_stop));
        btn_stop.setOnClickListener(this);
    }
    BlueToothManager.ConverDevice mconver=new BlueToothManager.ConverDevice() {
        @Override
        public void onLeScan(String name, String address) {
            Log.e("mconver","onLeScan-->"+name+": "+address);
        }

        @Override
        public void onLeStop() {
            Log.e("mconver","onLeStop");
        }

        @Override
        public void onTimeOut() {
            Log.e("mconver","onTimeOut");
        }
    };
    @Override
    public void onClick(View v) {
        int id=v.getId();
        switch (id){
            case R.id.btn_start:
                blueToothManager.startScan();
                break;
            case R.id.btn_stop:
                blueToothManager.stopScan();
                break;
        }
    }
}




时间有限 我会一点一点更新后续的 有问题直接联系QQ 群   644305228

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木头杨x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值