簡體   English   中英

如何刷新藍牙設備名稱【掃描緩存】?

[英]How to refresh Bluetooth device name [Scan Cache]?

我正在開發一個與BLE device連接並發送commands的應用程序。 其中一個命令是我們有a command for changing the Bluetooth device name

通信工作正常,但問題是當我們發送更改名稱的命令時,BLE 確認輸入並向我們發送輸出,但是當我們斷開連接並運行 LE Scan 時,它顯示的名稱與previous的名稱相同,它應該顯示new name of the device

如果我想獲取設備的最新名稱,我需要在設備中手動打開藍牙頁面並在掃描結果中掃描那里顯示最新名稱,當我再次打開后台的應用程序及其在延遲10-secLE scan功能下掃描,它在列表中顯示新名稱。

如何要求藍牙管理器或系統refresh the cache or refresh data for that Bluetooth device

我不知道創建票是正確的,但我已經在谷歌問題跟蹤器中創建了票: https ://issuetracker.google.com/issues/233924346

謝謝。

我遇到了同樣的問題,並通過從原始掃描數據中讀取新名稱來解決它。 通過這種方式,您永遠不必使用從緩存中返回舊名稱的 device.getName()。 這是用於掃描回調函數的 Android Java 代碼。

  private ScanCallback newscancallback()
    {
    ScanCallback scb;
  
    // Device scan callback.
    scb = new ScanCallback()
      {
      @Override
      public void onScanResult(int callbackType, ScanResult result)
        {
        super.onScanResult(callbackType, result);
        int n,k,len,getout;
        BluetoothDevice dev;
        byte[] rec;
        StringBuilder nameb;
        String name;
        
        
        dev = result.getDevice();
               
        // do not use dev.getName() which returns cached name
        // read current name from raw scan record instead 

        name = null;
        rec = result.getScanRecord().getBytes();
        len = rec.length;
        nameb = new StringBuilder();
        n = 0;
        getout = 0;
        // search scan record for name
        while(n < len-2 && rec[n] != 0 && getout == 0)
          {
          // rec[n] is length of next item
          // rec[n+1] is item type - look for 8 or 9=name
          // rec[n+2].. is the name, length rec[n]-1
          if(rec[n] > 1 && (rec[n+1] == 8 || rec[n+1] == 9)
            {  // found name
            for(k = 0 ; k < rec[n]-1 ; ++k)
              nameb.append((char)rec[n+2+k]);
            name = nameb.toString();
            getout = 1;
            }
          else  // go to next item
            n += rec[n] + 1;
          }
               
        // name is now null or the new name from the scan record

        }
    
      @Override
      public void onScanFailed(int errcode)
        {
        }
    
      @Override
      public void onBatchScanResults(List<ScanResult> result)
        {
        }
      };
    return (scb);
    }

如您在移動設備的藍牙設置中看到最新的名稱,我相信系統的藍牙管理器沒有問題。 問題在於代碼的掃描功能,因為它實際上還沒有刷新掃描列表,它可能會將最后一個已知的 BLE 列表保存在緩存中的某個位置。 如果您使用的是第三方庫,您可能需要查看他們的文檔或代碼以了解掃描功能的實際工作方式。 庫中可能有強制刷新選項或其他東西。 據我所知,為了節省設備的電池,實際刷新掃描列表會有延遲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM