Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
For an Android app, BluetoothAdapter.getAddress() is the API for the phone’s own Bluetooth adapter address—but an ordinary app generally cannot retrieve the real hardware address on modern Android. The current API contract also requires the privileged LOCAL_MAC_ADDRESS permission. If you mean a paired accessory’s address, that is a different API: BluetoothDevice.getAddress().
First, identify which Bluetooth address you need
“Bluetooth MAC address” can mean three different things. The distinction matters because the APIs and privacy limits differ.
| What you need | API or source | Important limitation |
|---|---|---|
| The Android phone’s local Bluetooth adapter | BluetoothAdapter.getAddress() |
Current Android API documentation lists privileged LOCAL_MAC_ADDRESS access; ordinary apps should not expect the real hardware address. |
| A paired accessory, such as a headset or keyboard | BluetoothDevice.getAddress() |
On Android 12 (API 31) and later, Bluetooth access requires BLUETOOTH_CONNECT. |
| A nearby device found by scanning | The scan result’s BluetoothDevice.getAddress() |
Scanning has separate permission requirements, and a Bluetooth Low Energy (BLE) address may be random or change over time. |
A Bluetooth MAC is typically displayed in six pairs of hexadecimal digits, such as 00:11:22:AA:BB:CC. That format alone does not tell you whether it belongs to the local adapter or another device, or whether a BLE address is stable.
Get the local adapter address: API and limits
Use BluetoothManager to obtain the adapter. BluetoothAdapter.getDefaultAdapter() was deprecated in API level 31. The following example shows the local-address API, handles a missing adapter, and treats denied access as unavailable:
#1 Best Overall
- Bluetooth 5.4 + Broad Compatibility - Provides Bluetooth 5.4 plus EDR technology and is backward compatible with Bluetooth V5.3/5.0/4.2/4.0/3.0/2.1/2.0/1.1.
- Faster Speed, Extended Range - Get up to 2x faster data transfer and 4x broader coverage compared to Bluetooth 4.0 — perfect for smooth audio streaming and stable connections.
- EDR and BLE Technology - This Bluetooth dongle is quipped with enhanced data rate and Bluetooth low energy, UB500 has greatly improved data transfer speed and operates at the optimal rate of power consumption
- Nano-Sized - A sleek, ultra-small design means you can insert the Nano Bluetooth receiver into any USB port and simply keep it there regardless of whether you are traveling or at home
- Plug & Play with Free Driver Support - Plug and play for Windows 8.1/10/11 (internet required). Supports Win7 (driver required and can be downloaded from website for free). Download the latest driver from TP-Link website to utilize Bluetooth 5.4
fun getLocalBluetoothAddress(context: Context): String? {
val manager = context.getSystemService(BluetoothManager::class.java)
?: return null
val adapter = manager.adapter ?: return null
return try {
adapter.address
} catch (e: SecurityException) {
null
}
}
This is an example of how to call the API, not a promise that the returned string is the phone’s factory address. The current BluetoothAdapter API reference lists BLUETOOTH_CONNECT for apps targeting Android 12/API 31 or later and the privileged LOCAL_MAC_ADDRESS permission for the local hardware address. A regular third-party app cannot treat that privileged permission as an ordinary runtime permission it can simply request from the user. Access therefore remains restricted even when the app has BLUETOOTH_CONNECT.
Android’s historical privacy documentation also describes local Bluetooth-address calls returning 02:00:00:00:00:00 instead of the actual address. Treat that value as anonymized or unavailable—not as the phone’s real MAC. It is not a guaranteed result on every Android release or manufacturer build. See the Android Developers’ privacy explanation.
Permissions: what they do and do not grant
| App target version | Relevant permission | What to know |
|---|---|---|
| Android 11 (API 30) or lower | BLUETOOTH |
The legacy permission applies to the documented local-address API contract for apps targeting API 30 or lower. |
| Android 12 (API 31) or later | BLUETOOTH_CONNECT |
Declare it in the manifest and request it at runtime before using Bluetooth APIs that require it. It does not grant privileged LOCAL_MAC_ADDRESS access. |
| Android 12 (API 31) or later, when scanning | BLUETOOTH_SCAN |
Needed for discovery/scanning, not merely to enumerate already paired devices. |
For modern apps, the manifest entry for connecting to or querying Bluetooth devices is:
Rank #2
- INSTANT BLUETOOTH ACCESS: Bluetooth dongle adapter receiver for PCs converts non-Bluetooth devices into Bluetooth-capable with simple USB connection
- WIDE COMPATIBILITY: Supports Bluetooth 5.4 and is backwards compatible with Bluetooth 5.3/5.2/5.1/5.0/V4.2/4.0/3.0/2.1/2.0/1.1; ONLY works with Windows 8.1, 10, and 11
- MULTI-DEVICE CONNECTION: Connect up to 6 devices simultaneously; Not compatible with all other operation systems e.g. Mac, Linux, Chrome, Unix, Playstation(PS), Windows 7 and below; Nano bluetooth receiver can be plugged in via any standard USB port
- ENHANCED PERFORMANCE: EDR and BLE technology offers enhanced data rate/transfer speed and low energy consumption
- SYSTEM REQUIREMENTS: Not compatible with all other operation systems e.g. Mac, Linux, Chrome, Unix, Playstation(PS), Windows 7 and below; Disable any built-in Bluetooth of the device before use this product, refer to the user manual for detail
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
Request the runtime permission on Android 12 and later before calling APIs that require it. A concise check in an Activity might look like this:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S &&
checkSelfPermission(Manifest.permission.BLUETOOTH_CONNECT) !=
PackageManager.PERMISSION_GRANTED
) {
requestPermissions(
arrayOf(Manifest.permission.BLUETOOTH_CONNECT),
REQUEST_BLUETOOTH_CONNECT
)
return
}
Handle the permission result before continuing. Catch SecurityException as well: permission can be denied or the particular operation can remain unavailable. Granting BLUETOOTH_CONNECT is not a workaround for the local-address restriction.
Get the address of a paired accessory
If you need a paired headset, watch, keyboard, or other remote device, enumerate the adapter’s bonded devices and read each BluetoothDevice.address. This is not the phone’s own adapter address. Android’s Bluetooth device discovery guidance describes the paired-device flow.
Rank #3
- Upgraded Bluetooth 5.3 Adapter: This bluetooth adapter for pc uses the latest upgraded Bluetooth 5.3 BR+EDR technology, greatly improves the stability of the connection data transfer speed, reduces the possibility of signal interruption and power consumption.
- Up to 5 Devices Sync Connected: UGREEN Bluetooth dongle for PC supports up to 5 different types of Bluetooth devices to be connected at the same time without interfering with each other, such as Bluetooth mouse/keyboard/mobile phone/headphones, etc. If Bluetooth audio devices of the same type (such as speakers/headphones) are connected, only one device can play music.
- Plug and Play: The Bluetooth adapter is developed for Windows systems only and does not support other systems. No driver installation is required under Windows 11/10/8.1. NOTE: Win 7, Linux and MacOS System are NOT supported.
- Mini Size: An extremely compact Bluetooth stick that you can leave on your laptop or PC without removing it.The compact size does not interfere with other USB ports. Convenient to carry, no space occupation.
- What Can I do if the Bluetooth adapter can not work?: Ensure there are no other Bluetooth devices installed on the computer. If there are, disable all existing Bluetooth devices in "Device Manager", then insert the adapter and try again. (For detailed information please read the user manual)
val manager = getSystemService(BluetoothManager::class.java)
val adapter = manager?.adapter
if (adapter != null) {
try {
for (device in adapter.bondedDevices) {
Log.d("Bluetooth", "${device.name}: ${device.address}")
}
} catch (e: SecurityException) {
// On Android 12+, check/request BLUETOOTH_CONNECT first.
}
}
bondedDevices means paired devices; it does not mean every device is currently connected. If Bluetooth is disabled or a device is out of range, a saved pairing may still be present, but you should not infer a live connection from the list.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Clear out junk files and repair common Windows errors3Fix the driver behind crashes, sound loss and screen glitchesFind a device that is not paired
For a nearby device, use Bluetooth discovery or the appropriate BLE scanning API, then read the address from the resulting remote BluetoothDevice. Scanning is asynchronous and consumes Bluetooth resources; it is unnecessary if the device is already paired. Classic Bluetooth discovery can take around 12 seconds and significantly reduces available Bluetooth bandwidth, so cancel discovery before trying to connect.
On Android 12 and later, a scan commonly requires the following declarations, alongside BLUETOOTH_CONNECT if the app also interacts with or reads information about devices:
Rank #4
- This Bluetooth adapter for PC utilizes the latest Bluetooth 6.0 EDR technology, delivering faster data transfer speeds, seamless high-quality audio/video streaming, and efficient large-file transfers.
- Up to 5 Devices Sync Connected: This Bluetooth dongle for PC supports up to 5 different types of Bluetooth devices to be connected at the same time without interfering with each other, such as Bluetooth mouse/keyboard/mobile phone/headphones, etc. Note: If Bluetooth audio devices of the same type (such as speakers/headphones) are connected, only one device can play music.
- Ultra-High Data Transfer Speeds: With Bluetooth 6.0 technology, this bluetooth dongle will bring us a faster speed experience. And Bluetooth 6.0 is backward compatible with Bluetooth5.4/5.3.
- EDR and BLE Technology - This Bluetooth dongle is equipped with enhanced data rate and Bluetooth low energy, it wil optimize energy.
- Plug and Play: The Bluetooth receiver is developed for Windows systems only and does not support other systems. No driver installation is required under Windows 11/10/8.1. NOTE: Linux and MacOS , Win 7 System are NOT supported.
<uses-permission
android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
Use neverForLocation only if the app does not derive physical location from scan results; Android notes that this declaration can affect which scan results are available. For some pairing-oriented discovery flows, Android recommends considering Companion Device Manager, which can perform discovery on the app’s behalf on Android 8 (API 26) and later.
BLE addresses may not be permanent
A BLE address observed during a scan is not necessarily a fixed hardware identifier. Devices can use public or random addresses, and privacy mechanisms can rotate addresses. Android added BluetoothDevice.getAddressType() in API level 35; it can identify types including public, random, anonymous, or unknown. Check the BluetoothDevice reference for API details. A changing address does not necessarily mean the accessory is a different physical device.
Free tools Windows power users keep installed
One-click scans. No signup required.
If an app needs to recognize a companion accessory over time, use a supported association or bonding flow and, where applicable, an identifier defined by the accessory’s protocol. Android’s CompanionDeviceManager documentation discusses rotating BLE MAC addresses and address resolution. Do not build an account or installation identity around a MAC address.
Best Value
- Bluetooth 5.4 dongle: Applies the latest Bluetooth 5.4+EDR technology, compatible with Bluetooth 5.3/5.2/4.2/4.2 LE/4.0/2.1+EDR, and supports Dual mode (BR/EDR+ Bluetooth Low Energy) to achieve low energy consumption and high speed. Quick response and better anti-interference.
- Plug & Play: USB wireless Bluetooth is not limited by network and location, no need to install drivers, just plug the USB wireless adapter into your computer, you can use it directly. You can use the Bluetooth function at any time. Greatly improve your work efficiency and save your time.
- Long Range Bluetooth Adapter: The USB Bluetooth 5.4 dongle uses Class 1 radio technology, equipped with extra long antenna, and the transmission range in the open area can reach 500ft/150m, Bluetooth connections are no longer affected by distance. Note: The actual transmission range will be affected by physical obstructions and wireless interference.
- Fast Transmission Rate: This upgraded Bluetooth 5.4 adapter features EDR technology and Bluetooth Low Energy (BLE) configuration up to 3Mbps, which greatly improves transmission rates and reduces the loss of transmission efficiency due to interference in the 2.4GHz band. Enables fast, no delay wireless data connections between your computer and Bluetooth devices.
- System Support: The upgraded Bluetooth 5.4 dongle has a wide range of applications. You can connect up to 5 devices at the same time using Bluetooth wireless. Such as Bluetooth speakers,keyboards,headsets,mice, and Bluetooth printers,etc. Only supports Windows 11/10/8.1, Not compatible with Mac OS, Linux,car stereo systems,XBOX,ps4 or TVs.
Can you find the phone’s address in Settings?
Possibly. Some manufacturers show a Bluetooth address under a page such as Settings → About phone → Status or Settings → About phone → Hardware information. Labels and paths vary by device, Android version, and manufacturer software, and many devices do not show the address there. There is no universal Android Settings path; if the field is absent, that is normal.
Troubleshooting
SecurityException: On Android 12 or later, verify thatBLUETOOTH_CONNECTis declared and granted for the Bluetooth operation. ForBluetoothAdapter.getAddress(), remember that the API also lists privilegedLOCAL_MAC_ADDRESS; the runtime permission alone does not make the local hardware address available.02:00:00:00:00:00: Treat it as a privacy placeholder or unavailable address, not a valid reading of the phone’s hardware identity.- Adapter is null: The device may lack Bluetooth support, or the system service may be unavailable. Check support with
packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)and handle a null result rather than assuming every Android device has an adapter. - Bluetooth is off: An adapter can exist while disabled. A normal app should send the user to system controls if Bluetooth needs to be enabled; apps targeting Android 13 (API 33) or later generally cannot enable or disable Bluetooth with
BluetoothAdapter.enable()ordisable(). For example, open the system page withstartActivity(Intent(Settings.ACTION_BLUETOOTH_SETTINGS)). The exact UI is device-dependent. - The address changes between scans: You may be seeing BLE address randomization. Do not assume a discovered address is stable; use an association, bonding, or protocol-level identity appropriate to the accessory.
- A paired-device example returns an address, but the phone’s address does not: These are separate operations.
device.addressidentifies a remote device;adapter.addressasks for the local adapter’s address.
Use an identifier intended for your app
If your goal is to identify an app installation, use an app-generated UUID stored in app-private storage or an account-backed identifier. If the goal is to connect a user’s accessory, use a companion-device association or a stable identifier supplied by the accessory’s protocol. These approaches avoid depending on a privacy-restricted local hardware address or a BLE address that may rotate.
Do not rely on undocumented ADB settings keys or vendor-specific filesystem paths to retrieve the real local MAC. They are not portable supported interfaces and may be inaccessible, absent, or stale on current devices.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

