老实说,我无法在不修改 sdk 的情况下想出一种方法来做到这一点。如果您是 OEM,这很容易(我在 4.3 上):
在 packages/apps/Settings/AndroidManifest.xml 中,注释配对对话框的意图过滤器:
<activity android:name=".bluetooth.BluetoothPairingDialog"
android:label="@string/bluetooth_pairing_request"
android:excludeFromRecents="true"
android:theme="@*android:style/Theme.Holo.Dialog.Alert">
<!-- <intent-filter>
<action android:name="android.bluetooth.device.action.PAIRING_REQUEST" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter> -->
</activity>
在 frameworks/base/core/java/android/bluetooth/BluetoothDevice.java 中,从此常量中删除 @hide javadoc 注释
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_PAIRING_REQUEST =
"android.bluetooth.device.action.PAIRING_REQUEST";
和这个方法
public boolean setPairingConfirmation(boolean confirm)
然后为 BluetoothDevice.PAIRING_REQUEST 操作注册您自己的活动或广播接收器。此广播接收器允许在无需用户输入的情况下继续配对(仅在不需要 pin 时):
@Override
public void onReceive(Context context, Intent intent) {
if( intent.getAction().equals(BluetoothDevice.ACTION_PAIRING_REQUEST) ) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
device.setPairingConfirmation( true );
}
}
您需要重建 sdk 并针对新版本编译代码以访问常量和方法,并替换 /system 分区上的 Settings.apk 以禁用对话框。您可能还需要作为系统应用程序运行,但我认为可能不需要。