2016-04-15 15 views
6

Tôi đang cố gắng đọc các đặc tính từ thiết bị BLE liên tục.Android Bluetooth LE - Đọc các đặc điểm không hoạt động trên Samsung

tôi đã tạo ra một Runnable trong lớp dịch vụ của tôi:

private class BackgroundRunnableForRead implements Runnable 
    { 


     private volatile boolean isRunning = true ; 
     @Override 
     public void run() { 
      try { 
      BluetoothLeService.this.backgroundRunID = Thread.currentThread().getId(); 
      while(isRunning) { 

        List<BluetoothGattService> gattServices = BluetoothLeService.this.getSupportedGattServices(); 

        if (gattServices != null && gattServices.size() > 0) { 
         BluetoothGattCharacteristic characteristic = getCharacteristic(gattServices); 

         if (characteristic != null && (characteristic.getProperties() & 2) > 0) { 
          BluetoothLeService.this.readCharacteristic(characteristic); 
         } 
        } 
       } 
      } 
      catch(Exception e) 
      { 
       isRunning= false; 
       e.printStackTrace(); 
      } 

     } 

     public void kill() 
     { 
      this.isRunning = false; 
     } 
    } 

Và trên khám phá thành công của dịch vụ tôi đang kêu gọi:

public void startReadingCharacteristics() 
    { 
     System.out.println("BluetoothLeService.startReadingCharacteristics"); 
     this.mBackgroundRunnable = new BackgroundRunnableForRead(); 
     mReadThread = new Thread(mBackgroundRunnable); 
     mReadThread.start(); 

    } 

Và đây là của tôi trên tính trạng đọc callback -

public void onCharacteristicRead(BluetoothGatt gatt, 
             BluetoothGattCharacteristic characteristic, 
             int status) { 
      System.out.println("BluetoothLeService.onCharacteristicRead" + status); 
      if (status == BluetoothGatt.GATT_SUCCESS) { 
       broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic); 
      } 

     } 

Ứng dụng hoạt động tốt trên Nexus 5, Nexus 4 và Motorola G.

Khi tôi đang chạy mã này trên Samsung S6 nó không hoạt động, onCharacteristicRead() không được gọi.

Tôi đọc rằng việc thực hiện các cuộc gọi tuần tự đến readCharacteristics() có thể gây ra sự cố khi nó chờ onCharacteristicRead thực thi.

+0

Phiên bản hệ điều hành là gì? –

+0

Phiên bản Os - Android 5.1.1. – Anukool

+0

Vui lòng định dạng mã của bạn –

Trả lời

0

Bạn nên thực hiện chỉ một lệnh gatt tại một thời điểm vì commands are not stacked. Vì vậy, bạn sẽ phải thực hiện một số loại cơ chế mà đọc tiếp theo được gọi là sau khi bạn đã có gọi lại đọc cho hiện tại.

Hãy nhớ rằng cuộc gọi lại gatt có thể đến từ các chủ đề khác nhau, nhưng điều này sẽ không có vấn đề nếu bạn lưu giá trị đọc trong gọi lại và sau đó kích hoạt đọc tiếp theo từ đó.

+0

Tôi đã thử bắt đầu đọc các đặc tính chỉ khi kích hoạt gọi lại onCharacteristicRead. Mặc dù không làm việc, bạn có nghĩ rằng nếu tôi đang làm điều gì sai ở đâu đó? – Anukool

+0

tốt, tại sao cuộc gọi lại 'onCharacteristicRead' được kích hoạt nếu bạn không thực hiện lệnh đọc đặc trưng trước? – JPS

+0

Đầu tiên tôi đang thực hiện một đặc tính đọc ngay sau khi các dịch vụ được phát hiện, và sau đó lần đầu tiên oncharacteristicsRead được gọi. Và sau đó tôi gọi các đặc tính đọc trong onCharacteristicsRead nó không hoạt động. – Anukool

Các vấn đề liên quan