Android 屏蔽蓝牙连接时的首次配对系统弹窗_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > Android 屏蔽蓝牙连接时的首次配对系统弹窗

Android 屏蔽蓝牙连接时的首次配对系统弹窗

 2015/4/28 3:13:25  草裡菌  程序员俱乐部  我要评论(0)
  • 摘要:连接配对密码已知且固定的蓝牙设备时,明明在代码里就可以完成配对,却依旧被系统弹出配对窗口.这无疑是令人难受的.所以,便尝试着去屏蔽掉这个配对窗口.要点:中断系统发出的蓝牙配对广播需要用到ClsUtils开源框架个人测试在Android4.4上成功拦截,在4.2上不行,也许是高版本把蓝牙配对广播设为了有序广播?code:publicclassBluetoothConnectReceiverextendsBroadcastReceiver
  • 标签:android 连接

连接配对密码已知且固定的蓝牙设备时,明明在代码里就可以完成配对,却依旧被系统弹出配对窗口.

这无疑是令人难受的.

所以,便尝试着去屏蔽掉这个配对窗口.

 

要点:

  • 中断系统发出的蓝牙配对广播
  • 需要用到ClsUtils开源框架
  • 个人测试在Android 4.4上成功拦截,在4.2上不行,也许是高版本把蓝牙配对广播设为了有序广播?

 

code:

public class BluetoothConnectReceiver extends BroadcastReceiver
{

 private final String TAG = "BluetoothConnectReceiver";

 @SuppressLint("NewApi")
 @Override
 public void onReceive(Context context, Intent intent)
 {

  Log.i(TAG, TAG + " -> BluetoothConnectReceiver start!");

  if (intent.getAction().equals("android.bluetooth.device.action.PAIRING_REQUEST"))
  {
   BluetoothDevice btDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

   Log.i(TAG, TAG + " -> ddd");
   try
   {
    Log.i(TAG, TAG + " -> Device Name = " + btDevice.getName());

    if ("Device Name X".equals(btDevice.getName()))
    {
     abortBroadcast();
     ClsUtils.setPin(btDevice.getClass(), btDevice, "password"); 
     ClsUtils.createBond(btDevice.getClass(), btDevice);
     ClsUtils.cancelPairingUserInput(btDevice.getClass(), btDevice);
    }
   }
   catch (Exception e)
   {
    e.printStackTrace();
   }
  }
 }
}

通过预设的密码直接静默配对.

 

manifest:

<receiver android:name=".BluetoothConnectReceiver" >
   <intent-filter android:priority="1000" >
      <action android:name="android.bluetooth.device.action.PAIRING_REQUEST" />
   </intent-filter>
</receiver>

接收器的优先级设为最高1000,保证最先被广播通知.

发表评论
用户名: 匿名