准备整理一下蓝牙的相关的东西 为自己的将来准备一下
废话不多说了啊 我会分几批把博客写完(代码量有点多,完全是自己写的适配所有的硬件设备)
首先从最开始写起 ----》》》》扫描
先把权限配置好 避免后续问题的发生
蓝牙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