這篇文章將為大家詳細講解有關(guān)android如何實現(xiàn)藍牙app,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),孝昌企業(yè)網(wǎng)站建設(shè),孝昌品牌網(wǎng)站建設(shè),網(wǎng)站定制,孝昌網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,孝昌網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。android實現(xià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è)備 不同uuid private UUID characteristicUUID; //不同設(shè)備 不同uuid private 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; @Override protected 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(); } @Override protected void onStart() { super.onStart(); Log.i("tag", "MainActivity onStart()"); bluetoothScan(); } //返回 @Override public boolean onKeyUp(int keyCode, KeyEvent event) { Log.i("tag", "MainActivity onKeyUp()"); this.finish(); return super.onKeyUp(keyCode, event); } //重新掃描藍牙 @Override public 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(); } //調(diào)用系統(tǒng)服務(wù)的方式,請求開啟藍牙 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(); //回調(diào) } else { Toast.makeText(this, "掃描中..", Toast.LENGTH_SHORT).show(); } } //更新藍牙列表中的數(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, "附近沒有藍牙", Toast.LENGTH_SHORT).show(); } } //取得gatt 對應(yīng)的service private 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對應(yīng)的characteristic private BluetoothGattCharacteristic getGattCharacteristic(BluetoothGattService gattService, UUID characteristicUUID) { List<BluetoothGattCharacteristic> gattCharacteristics = gattService.getCharacteristics(); for (BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) { if (gattCharacteristic.getUuid().equals(characteristicUUID)) { return gattCharacteristic; } } return null; } //注冊藍牙掃描監(jiān)聽 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); } //定義藍牙掃描監(jiān)聽類 添加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, "附近沒有發(fā)現(xiàn)藍牙設(shè)備", Toast.LENGTH_SHORT).show(); } } } } //注冊燈光監(jiān)聽 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)聽類 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) } } //藍牙連接/通信回調(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(); //連接成功,開始搜索服務(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è)置 藍牙模組需要的數(shù)據(jù) gatt.writeCharacteristic(gattCharacteristic); } else if (lightAction.equals("closeLight")) { gattCharacteristic.setValue("closeLight"); //這里自己設(shè)置 藍牙模組需要的數(shù)據(jù) gatt.writeCharacteristic(gattCharacteristic); } lightAction = ""; gatt.readRemoteRssi(); } } } @Override protected 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; } }
關(guān)于“android如何實現(xiàn)藍牙app”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
分享題目:android如何實現(xiàn)藍牙app-創(chuàng)新互聯(lián)
本文路徑:http://jinyejixie.com/article24/dcjsce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計、網(wǎng)站營銷、網(wǎng)站設(shè)計、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容