首页 > 系统 > Android > 正文

android实现蓝牙app代码

2019-10-22 18:10:28
字体:
来源:转载
供稿:网友

本文实例为大家分享了android实现蓝牙app的具体代码,供大家参考,具体内容如下

private BluetoothGatt bluetoothGatt;private BluetoothGattService gattService;private BluetoothGattCharacteristic gattCharacteristic;private BluetoothManager bluetoothManager;private BluetoothAdapter bluetoothAdapter;private List<BluetoothDevice> devices = new ArrayList<>();private UUID serviceUUID;  //不同设备 不同uuidprivate UUID characteristicUUID;   //不同设备 不同uuidprivate final UUID service4UUID= UUID.fromString("0000fff0-0000-1000-8000-00805f9b34fb");  private final UUID charAUUID = UUID.fromString("0000fffa-0000-1000-8000-00805f9b34fb");private LightReceiver lightReceiver;private ScanReceiver scanReceiver;private ListView listView;private TextView tvrefresh;private String lightAction;@Overrideprotected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  Log.i("tag", "MainActivity  onCreate()");  //  listView = (ListView) findViewById(R.id.lv_bluetooth);  tvrefresh = (TextView) findViewById(R.id.tv_refresh_bluetooth);  tvrefresh.setOnClickListener(this);  openBluetooth();  registeLigthReceiver();  registeScanReceiver();}@Overrideprotected void onStart() {  super.onStart();  Log.i("tag", "MainActivity  onStart()");  bluetoothScan();}//返回@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {  Log.i("tag", "MainActivity  onKeyUp()");  this.finish();  return super.onKeyUp(keyCode, event);}//重新扫描蓝牙@Overridepublic void onClick(View view) {  switch (view.getId()) {    case R.id.tv_refresh_bluetooth:      //蓝牙扫描      bluetoothScan();      break;    default:      break;  }}//打开本地蓝牙private void openBluetooth() {  Log.i("tag", "openLocalBluetooth()");  //检查手机是否支持蓝牙4.0  if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {    Toast.makeText(this, "手机不支持蓝牙4.0", Toast.LENGTH_SHORT).show();    finish();  }  //调用系统服务的方式,请求开启蓝牙  bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);  bluetoothAdapter = bluetoothManager.getAdapter();  //开启蓝牙  if (!bluetoothAdapter.isEnabled()) {    bluetoothAdapter.enable();  }}//开始蓝牙扫描  扫描到一个添加一个private void bluetoothScan() {  Log.i("tag", "bluetoothScan()");  if (bluetoothAdapter == null) {    openBluetooth();  }  if (!bluetoothAdapter.isDiscovering()) {    bluetoothAdapter.startDiscovery();  //回调  } else {    Toast.makeText(this, "扫描中..", Toast.LENGTH_SHORT).show();  }}//更新蓝牙列表中的数据private void updateUi() {  Log.i("tag", "updateUi()");  if (devices != null && devices.size() > 0) {    BlueAdapter adapter = new BlueAdapter(this, devices);    listView.setAdapter(adapter);    adapter.notifyDataSetChanged();  } else {    Toast.makeText(this, "附近没有蓝牙", Toast.LENGTH_SHORT).show();  }}//取得gatt 对应的serviceprivate BluetoothGattService getGattService(BluetoothGatt gatt, UUID serviceUUID) {  List<BluetoothGattService> gattServices = gatt.getServices();  for (BluetoothGattService gattService : gattServices) {    if (gattService.getUuid().equals(serviceUUID)) {      return gattService;    }  }  return null;}//取得service对应的characteristicprivate BluetoothGattCharacteristic getGattCharacteristic(BluetoothGattService gattService, UUID characteristicUUID) {  List<BluetoothGattCharacteristic> gattCharacteristics = gattService.getCharacteristics();  for (BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) {    if (gattCharacteristic.getUuid().equals(characteristicUUID)) {      return gattCharacteristic;    }  }  return null;}//注册蓝牙扫描监听private void registeScanReceiver() {  Log.i("tag", "registeScanReceiver()");  scanReceiver = new ScanReceiver();  IntentFilter filter = new IntentFilter();  filter.addAction(BluetoothDevice.ACTION_FOUND);  filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);  registerReceiver(scanReceiver, filter);}//定义蓝牙扫描监听类 添加device , 更新界面class ScanReceiver extends BroadcastReceiver {  @Override  public void onReceive(Context context, Intent intent) {    Log.i("tag", " BluetoothReceiver / ScanReceiver onReceive()  action=" + intent.getAction());    String scanAction = intent.getAction();    if (scanAction.equals(BluetoothDevice.ACTION_FOUND)) {      BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);      if (!devices.contains(device)) {        devices.add(device);        if (CacheUtils.getBlueDeviceString(MainActivity1.this, device.getAddress()).equals("")) {          CacheUtils.putBlueDeviceString(MainActivity1.this, device.getAddress(), device.getName());        }        updateUi();      }    } else if (scanAction.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {      if (devices == null || devices.size() == 0) {        Toast.makeText(MainActivity1.this, "附近没有发现蓝牙设备", Toast.LENGTH_SHORT).show();      }    }  }}//注册灯光监听private void registeLigthReceiver() {  Log.i("tag", "registeReceiver()");  lightReceiver = new LightReceiver();  IntentFilter filter = new IntentFilter();  filter.addAction("openLight");  filter.addAction("closeLight");  registerReceiver(lightReceiver, filter);}//定义灯控监听类class LightReceiver extends BroadcastReceiver {  @Override  public void onReceive(Context context, Intent intent) {    Log.i("tag", " BluetoothReceiver  /LightReceiver onReceive()  action=" + intent.getAction());    //    String address = intent.getStringExtra("bluetoothAddress");  //从adapter取得的数据    lightAction = intent.getAction();    // if()   不同设备  不同serviceUUID,不同的characteristicUUID 自己确定    serviceUUID=service4UUID;    characteristicUUID=charAUUID;    if (bluetoothAdapter == null) {      openBluetooth();    }    BluetoothDevice device = bluetoothAdapter.getRemoteDevice(address);      MyBluetoothGattCallback gattCallback = new MyBluetoothGattCallback();    bluetoothGatt = device.connectGatt(MainActivity1.this, false, gattCallback);  //回调  }}//蓝牙连接/通信回调class MyBluetoothGattCallback extends android.bluetooth.BluetoothGattCallback {  @Override  public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {    super.onConnectionStateChange(gatt, status, newState);    Log.i("tag", "MyBluetoothGattCallback  onConnectionStateChange()  newState=" + newState);    if (newState == BluetoothProfile.STATE_CONNECTED) {      gatt.discoverServices();       //连接成功,开始搜索服务,一定要调用此方法,否则获取不到服务      Log.i("tag", "MyBluetoothGattCallback  STATE_CONNECTED  ");    } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {      Log.i("tag", "MyBluetoothGattCallback  STATE_DISCONNECTED");    }  }  @Override  public void onServicesDiscovered(BluetoothGatt gatt, int status) {    super.onServicesDiscovered(gatt, status);    Log.i("tag", "MyBluetoothGattCallback  onServicesDiscovered() status=" + status);    if (lightAction.equals("openLight") || lightAction.equals("closeLight")) {  //避免 不停更新      if (gattService == null || gattCharacteristic == null || !serviceUUID.equals(service4UUID) || !characteristicUUID.equals(charAUUID)) {        gattService = getGattService(gatt, serviceUUID);        if (gattService != null) {          gattCharacteristic = getGattCharacteristic(gattService, characteristicUUID);          if (gattCharacteristic != null) {            gatt.setCharacteristicNotification(gattCharacteristic, true);            gatt.connect();          }        }      }      if (lightAction.equals("openLight")) {        gattCharacteristic.setValue("openLight"); //这里自己设置 蓝牙模组需要的数据        gatt.writeCharacteristic(gattCharacteristic);      } else if (lightAction.equals("closeLight")) {        gattCharacteristic.setValue("closeLight"); //这里自己设置 蓝牙模组需要的数据        gatt.writeCharacteristic(gattCharacteristic);      }      lightAction = "";      gatt.readRemoteRssi();    }  }}@Overrideprotected void onDestroy() {  super.onDestroy();  Log.i("tag", "onDestroy()");  if (bluetoothAdapter != null) {    bluetoothAdapter.disable();    bluetoothAdapter = null;  }  if (bluetoothGatt != null) {    bluetoothGatt.disconnect();    bluetoothGatt.close();    bluetoothGatt = null;  }  if (lightReceiver != null) {    unregisterReceiver(lightReceiver);    lightReceiver = null;  }  if (scanReceiver != null) {    unregisterReceiver(scanReceiver);    scanReceiver = null;  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表