[英]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.