首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 藍牙 BluetoothDevice 本地存儲:僅保存 MAC 地址字符串,用時重建對象

     編輯:程式設計疑難解答

問題

  • 能否直接將 `BluetoothDevice` 對象序列化保存到 SharedPreferences/文件?
  • 能否將 MAC 地址字符串轉回 `BluetoothDevice`?

答案

  1. 不可直接保存對象:`BluetoothDevice` 非 `Serializable`/`Parcelable`,且包含底層 Native 句柄,進程重啟後句柄失效。
  2. 不可由 MAC 字符串直接構造:無公構造函數,需通過 `BluetoothAdapter.getRemoteDevice(macString)` 獲取。

最佳實踐:只存 MAC 地址

// 保存
SharedPreferences sp = getSharedPreferences("bt", MODE_PRIVATE);
sp.edit().putString("device_mac", device.getAddress()).apply();

// 使用時重建
String mac = sp.getString("device_mac", "");
if (!TextUtils.isEmpty(mac)) {
    BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
    BluetoothDevice device = adapter.getRemoteDevice(mac); // 可能拋 IllegalArgumentException
    // 後續連接、配對...
}

注意事項

  • `getRemoteDevice` **不發起連接**,僅創建代理對象;若設備不在配對列表,後續 `createBond()` 會發起配對請求。
  • MAC 地址格式標準:`XX:XX:XX:XX:XX:XX`(大寫/小寫均可)。
  • Android 6.0+ 需 `ACCESS_FINE_LOCATION` 或 `BLUETOOTH_SCAN` 權限才能掃描/獲取遠程設備。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved