Ответ 1
Я, честно говоря, не смог придумать способ сделать это без изменения sdk. Если вы OEM, это легко (я на 4.3):
В пакетах/приложениях/настройках/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>
В рамках /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. Этот широковещательный приемник позволяет спариваться, продолжая без ввода пользователя (только если не требуется вывод):
@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 и скомпилировать свой код с новой версией, чтобы получить доступ к константе и методам, и замените Settings.apk на/системном разделе, чтобы отключить диалог. Возможно, вам также понадобится работать как системное приложение, но я думаю, скорее всего, не будет.