diff --git a/src/com/android/settings/bluetooth/BluetoothPairingController.java b/src/com/android/settings/bluetooth/BluetoothPairingController.java
index a1d86be..ca3dda6 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingController.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingController.java
@@ -60,6 +60,7 @@
     private String mUserInput;
     private String mPasskeyFormatted;
     private int mPasskey;
+    private int mInitiator;
     private String mDeviceName;
     private LocalBluetoothProfile mPbapClientProfile;
     private boolean mPbapAllowed;
@@ -84,6 +85,8 @@
 
         mType = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.ERROR);
         mPasskey = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_KEY, BluetoothDevice.ERROR);
+        mInitiator =
+                intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_INITIATOR, BluetoothDevice.ERROR);
         mDeviceName = mBluetoothManager.getCachedDeviceManager().getName(mDevice);
         mPbapClientProfile = mBluetoothManager.getProfileManager().getPbapClientProfile();
         mPasskeyFormatted = formatKey(mPasskey);
@@ -177,7 +180,7 @@
             default:
                 if (mDevice.getBluetoothClass().getDeviceClass()
                         == BluetoothClass.Device.AUDIO_VIDEO_HANDSFREE) {
-                    return true;
+                    return BluetoothDevice.EXTRA_PAIRING_INITIATOR_FOREGROUND == mInitiator;
                 }
                 return false;
         }
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingRequest.java b/src/com/android/settings/bluetooth/BluetoothPairingRequest.java
index 7da6342..bd78b55 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingRequest.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingRequest.java
@@ -37,9 +37,6 @@
     if (!action.equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) {
       return;
     }
-    // convert broadcast intent into activity intent (same action string)
-    Intent pairingIntent = BluetoothPairingService.getPairingDialogIntent(context, intent);
-
     PowerManager powerManager =
         (PowerManager)context.getSystemService(Context.POWER_SERVICE);
     BluetoothDevice device =
@@ -51,6 +48,10 @@
     if (powerManager.isInteractive() && shouldShowDialog) {
       // Since the screen is on and the BT-related activity is in the foreground,
       // just open the dialog
+      // convert broadcast intent into activity intent (same action string)
+      Intent pairingIntent = BluetoothPairingService.getPairingDialogIntent(context, intent,
+              BluetoothDevice.EXTRA_PAIRING_INITIATOR_FOREGROUND);
+
       context.startActivityAsUser(pairingIntent, UserHandle.CURRENT);
     } else {
       // Put up a notification that leads to the dialog
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingService.java b/src/com/android/settings/bluetooth/BluetoothPairingService.java
index 53e93d9..10d5ca8 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingService.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingService.java
@@ -51,7 +51,7 @@
 
     private BluetoothDevice mDevice;
 
-    public static Intent getPairingDialogIntent(Context context, Intent intent) {
+    public static Intent getPairingDialogIntent(Context context, Intent intent, int initiator) {
         BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
         int type = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
                 BluetoothDevice.ERROR);
@@ -65,6 +65,7 @@
             int pairingKey = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_KEY,
                     BluetoothDevice.ERROR);
             pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_KEY, pairingKey);
+            pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_INITIATOR, initiator);
         }
         pairingIntent.setAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
         pairingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -124,7 +125,8 @@
                 .setLocalOnly(true);
 
         PendingIntent pairIntent = PendingIntent.getActivity(this, 0,
-                getPairingDialogIntent(this, intent),
+                getPairingDialogIntent(this, intent,
+                        BluetoothDevice.EXTRA_PAIRING_INITIATOR_BACKGROUND),
                 PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
 
         PendingIntent dismissIntent = PendingIntent.getBroadcast(this, 0,
