国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

android實(shí)現(xiàn)藍(lán)牙app代碼

2019-10-22 18:10:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例為大家分享了android實(shí)現(xiàn)藍(lán)牙app的具體代碼,供大家參考,具體內(nèi)容如下

private BluetoothGatt bluetoothGatt;private BluetoothGattService gattService;private BluetoothGattCharacteristic gattCharacteristic;private BluetoothManager bluetoothManager;private BluetoothAdapter bluetoothAdapter;private List<BluetoothDevice> devices = new ArrayList<>();private UUID serviceUUID;  //不同設(shè)備 不同uuidprivate UUID characteristicUUID;   //不同設(shè)備 不同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);}//重新掃描藍(lán)牙@Overridepublic void onClick(View view) {  switch (view.getId()) {    case R.id.tv_refresh_bluetooth:      //藍(lán)牙掃描      bluetoothScan();      break;    default:      break;  }}//打開(kāi)本地藍(lán)牙private void openBluetooth() {  Log.i("tag", "openLocalBluetooth()");  //檢查手機(jī)是否支持藍(lán)牙4.0  if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {    Toast.makeText(this, "手機(jī)不支持藍(lán)牙4.0", Toast.LENGTH_SHORT).show();    finish();  }  //調(diào)用系統(tǒng)服務(wù)的方式,請(qǐng)求開(kāi)啟藍(lán)牙  bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);  bluetoothAdapter = bluetoothManager.getAdapter();  //開(kāi)啟藍(lán)牙  if (!bluetoothAdapter.isEnabled()) {    bluetoothAdapter.enable();  }}//開(kāi)始藍(lán)牙掃描  掃描到一個(gè)添加一個(gè)private void bluetoothScan() {  Log.i("tag", "bluetoothScan()");  if (bluetoothAdapter == null) {    openBluetooth();  }  if (!bluetoothAdapter.isDiscovering()) {    bluetoothAdapter.startDiscovery();  //回調(diào)  } else {    Toast.makeText(this, "掃描中..", Toast.LENGTH_SHORT).show();  }}//更新藍(lán)牙列表中的數(shù)據(jù)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, "附近沒(méi)有藍(lán)牙", Toast.LENGTH_SHORT).show();  }}//取得gatt 對(duì)應(yīng)的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對(duì)應(yīng)的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;}//注冊(cè)藍(lán)牙掃描監(jiān)聽(tīng)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);}//定義藍(lán)牙掃描監(jiān)聽(tīng)類(lèi) 添加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, "附近沒(méi)有發(fā)現(xiàn)藍(lán)牙設(shè)備", Toast.LENGTH_SHORT).show();      }    }  }}//注冊(cè)燈光監(jiān)聽(tīng)private void registeLigthReceiver() {  Log.i("tag", "registeReceiver()");  lightReceiver = new LightReceiver();  IntentFilter filter = new IntentFilter();  filter.addAction("openLight");  filter.addAction("closeLight");  registerReceiver(lightReceiver, filter);}//定義燈控監(jiān)聽(tīng)類(lèi)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取得的數(shù)據(jù)    lightAction = intent.getAction();    // if()   不同設(shè)備  不同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);  //回調(diào)  }}//藍(lán)牙連接/通信回調(diào)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();       //連接成功,開(kāi)始搜索服務(wù),一定要調(diào)用此方法,否則獲取不到服務(wù)      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"); //這里自己設(shè)置 藍(lán)牙模組需要的數(shù)據(jù)        gatt.writeCharacteristic(gattCharacteristic);      } else if (lightAction.equals("closeLight")) {        gattCharacteristic.setValue("closeLight"); //這里自己設(shè)置 藍(lán)牙模組需要的數(shù)據(jù)        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;  }}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁晋县| 新昌县| 浦县| 石城县| 镇康县| 乌兰浩特市| 台北市| 徐闻县| 辛集市| 手游| 云和县| 南澳县| 时尚| 石景山区| 承德县| 西昌市| 久治县| 沾益县| 昆明市| 长乐市| 榆中县| 诸暨市| 罗田县| 河间市| 舒城县| 金沙县| 廉江市| 新丰县| 柳州市| 洛扎县| 三门县| 横峰县| 罗田县| 榆社县| 和政县| 新安县| 崇信县| 巴林左旗| 兴业县| 长阳| 安达市|