Sinceramente non sono stato in grado di trovare un modo per farlo senza modificare il sdk. Se sei l'OEM, è facile (sono in 4.3):
In pacchetti/apps/Impostazioni/AndroidManifest.xml, commentare il filtro intenti per la finestra di abbinamento:
<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>
In quadri /base/core/java/android/bluetooth/BluetoothDevice.java rimuovere l'annotazione @hide javadoc da questa costante
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_PAIRING_REQUEST =
"android.bluetooth.device.action.PAIRING_REQUEST";
e questo metodo
public boolean setPairingConfirmation(boolean confirm)
Quindi registrare la propria attività o ricevitore di trasmissione per l'azione BluetoothDevice.PAIRING_REQUEST. Questo ricevitore trasmissione permette l'accoppiamento di continuare senza l'input dell'utente (solo se non è richiesta alcuna 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);
}
}
Avrai bisogno di ricostruire la SDK e compilare il codice contro la nuova versione per ottenere l'accesso alla costante e metodi e sostituire Settings.apk nella partizione/system per disabilitare la finestra di dialogo. Potrebbe anche essere necessario eseguire l'app di sistema, ma penso che probabilmente non lo sia.
fonte
2014-05-16 16:24:22
Ho lo stesso problema. Posso chiudere la finestra di dialogo senza l'input dell'utente chiamando device.cancelPairingUserInput(); device.setPairingConfirmation (true); ma solo dopo aver ricevuto l'azione BluetoothDevice.ACTION_BOND_STATE_CHANGED con lo stato BluetoothDevice.BOND_BONDING, quindi la finestra di dialogo viene visualizzata brevemente e quindi viene chiusa. –