簡體   English   中英

如何防止Android藍牙緩存設備名稱? (服務器端)

[英]How to prevent Android bluetooth caching device names? (Server side)

我有一個接受傳入連接的藍牙服務器套接字。 當我調用accept()時,將返回一個藍牙套接字,該藍牙套接字用於通過調用getRemoteDevice()來獲取有關與服務器連接的設備的信息。 一切正常,但是,當我獲得遠程設備的名稱時,它將顯示“緩存的”名稱。 假設有一個客戶端連接到服務器,並且該客戶端的藍牙設備名稱為“ A”。 它連接到服務器,服務器將輸出設備“ A”已連接。 但是,我決定將客戶端的藍牙設備名稱更改為“ B”。 當我再次連接到服務器時,服務器仍然認為客戶端的藍牙設備名稱為:“ A”。

反正我有什么辦法防止這種緩存? 或者,至少我有辦法獲取最新的,更新的設備名稱嗎?

我已經看到有些人使用fetchUuidsWithSdp。 因此,我嘗試如下使用它:

private void manageConnectedSocket(BluetoothSocket socket) {
    // Manage the socket returned by BluetoothSeverSocket.accept()
    final BluetoothDevice device = socket.getRemoteDevice();
    // System.out.println("\nAdded: " + device.getName() + " " + device.getAddress());
    device.fetchUuidsWithSdp();
}

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_UUID.equals(action)) {
            // Get the device
            final BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            System.out.println("\nAdded: " + device.getName() + " " + device.getAddress());
        }
    }
};

當然,在onCreate中,我已按以下方式注冊了接收者:

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_UUID);
registerReceiver(mReceiver, filter);

這不起作用,並且仍然輸出“緩存的”藍牙設備名稱。 在客戶端(發現)端,即使沒有fetchUuidsWithSdp()(客戶端不緩存服務器的藍牙設備名稱),一切也可以正常工作。 任何人都對如何從客戶端藍牙設備獲取最新名稱有任何想法? 由於這一問題,我的項目處於停滯狀態。

代替ACTION_UUID注冊

BluetoothDevice.ACTION_NAME_CHANGED

此操作始終包含額外的字段EXTRA_DEVICE和EXTRA_NAME。

暫無
暫無

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

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