[Nexus 6P Q&A, Help & Troubleshooting] chowfun:
TL;DR - The Sears app is also a big source of Bluetooth wake locks. Either uninstall the app, or disable the Bluetooth components by using the following commands:

adb shell pm disable com.sears.android/com.bluecats.sdk.BlueCatsSDKService

adb shell pm disable com.sears.android/com.android.sears.beacons.interfaces.BlueCatsSDKInterfaceService

---

I too was also having similar Bluetooth wake lock issues on my Nexus 6, to the point where my battery charging percentage would barely increase (or sometimes even decrease) when plugged into a normal USB port. The only thing that would charge the phone while Bluetooth was turned on was an "AC" type charger that supplied more current to the phone.

Like others suggested, I too have the GasBuddy app installed, and while it does utilize Bluetooth while the app is in the foreground, the activities ceased as soon as I put it in the background.

Looking at logcat, I am seeing these messages every 3-30 seconds:

...

D BluetoothAdapter: STATE_ON

D BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5

...

Seeing these are Bluetooth Low Energy (BLE) scans, I immediately suspect Android Wear to be the culprit, but uninstalling the app does not cause the scans to cease. To be sure, I also uninstalled anything else I could think of that utilizes Bluetooth, such as Xiialive Radio, Android Wear, GasBuddy, Automate, etc... None of these apps stopped the scans. At this point, I thought Marshmallow has changed the way the Android operating system scans for BLE devices, and I thought this might actually be a Google issue.

Before giving up, I was watching the logcat while booting the device, and interestingly this got my attention:

I ActivityManager: Waited long enough for: ServiceRecord{2f43140 u0 com.sears.android/com.bluecats.sdk.BlueCatsSDKService}

While I didn't know what Bluecats was, I took a shot at Google and found them to be a beacons supplier company. These are little Bluetooth devices that various companies use to give mobile apps insights as far as where your device is in a particular area. For example, a department store can put them in their store to see that you are inside a particular department within their store, and they can use that information to track what departments their customers are visiting most and what departments / areas need work.

Seeing this was linked to the Sears app, I looked at the Sears app inside the application manager and lo and behold, it does require Bluetooth and Bluetooth admin permissions. I uninstalled the app, and waited a couple minutes. Looking back at logcat, the

D BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5

messages no longer appeared.

To confirm the issue, I reinstalled the app and upon startup, it persistently asked for the Location permission, and would not take Deny for an answer (interestingly the later versions of Marshmallow there is an Always deny option which didn't exist before). Despite denying the location permission, it still seems to be able to power on the Bluetooth adapter, as seen below (note that Bluetooth has to be on already for it to do this):

D BluetoothAdapter: STATE_ON

D BtGatt.GattService: registerClient() - UUID=9ebddfb9-788d-45e0-ae25-5a6c4a242d28

D BtGatt.GattService: onClientRegistered() - UUID=9ebddfb9-788d-45e0-ae25-5a6c4a242d28, clientIf=5

D BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5

D BtGatt.GattService: start scan with filters

W Binder : Caught a RuntimeException from the binder stub implementation.

W Binder : java.lang.SecurityException: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to get scan results

W Binder : at android.os.Parcel.readException(Parcel.java:1620)

W Binder : at android.os.Parcel.readException(Parcel.java:1573)

W Binder : at android.bluetooth.IBluetoothGatt$Stub$Proxy.startScan(IBluetoothGatt.java:772)

W Binder : at android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper.onClientRegistered(BluetoothLeScanner.java:324)

W Binder : at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:56)

Disabling the application services via the following:

adb shell pm disable com.sears.android/com.bluecats.sdk.BlueCatsSDKService

adb shell pm disable com.sears.android/com.android.sears.beacons.interfaces.BlueCatsSDKInterfaceService

did work to stop the massive Bluetooth scans.

If you want to see if your Bluetooth problem was related to the BlueCats service, you can use:

adb logcat | findstr BlueCats

on Windows

or

adb logcat | grep BlueCats

This should tell you if a particular app is using this service. For example:

I ActivityManager: Start proc 6141:com.sears.android/u0a257 for broadcast com.sears.android/com.bluecats.sdk.BlueCatsSDKServiceReceiver

Hope this helps someone out there with these wakelock issues.