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

Android BluetoothAdapter getName/getAddress 返回空值原因排查

     編輯:程式設計綜合問答

現象

取得非 null 的 BluetoothAdapter 實例,呼叫 getName() 與 getAddress() 均返回 null 或空字串。

可能原因

  1. 藍牙未開啟:BluetoothAdapter.getDefaultAdapter() 返回介面卡物件,但底層藍牙無線電關閉時,名稱/地址可能為空。需先 adapter.enable() 或引導使用者開啟。
  2. 權限缺失:AndroidManifest.xml 缺少 BLUETOOTH、BLUETOOTH_ADMIN (API 31+ 需 BLUETOOTH_CONNECT) 權限。
  3. 設備不支援:部分模擬器或無藍牙硬體裝置返回預設介面卡,但無有效地址。
  4. 系統版本行為差異:Android 6.0+ 執行時權限模型,需動態申請 ACCESS_FINE_LOCATION 才能掃描/獲取藍牙資訊。

排查代碼

BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter == null) {
    // 裝置不支援藍牙
} else {
    if (!adapter.isEnabled()) {
        Intent enableBt = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBt, REQUEST_ENABLE_BT);
    }
    // 確保權限已授予 (API 23+)
    String name = adapter.getName();  // 可能為 null,預設為 "Android"
    String address = adapter.getAddress(); // 格式 "XX:XX:XX:XX:XX:XX"
}

最佳實踐

  • 在 onResume 中檢查藍牙狀態與權限。
  • 使用 BluetoothManager (API 18+) 取得 BluetoothAdapter 更可靠。
  • 針對 Android 12+ 使用 BluetoothAdapter.getBluetoothLeScanner() 進行低功耗掃描。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved