Android Prevent Bluetooth Dialing Dialog

Estoy desarrollando una aplicación interna que utiliza Bluetooth para imprimir. Quiero que el emparejamiento de Bluetooth ocurra sin la entrada del usuario. He conseguido que funcione atrapando la transmisión android.bluetooth.device.action.PAIRING_REQUEST .

En mi receptor de difusión llamo el método setPin, y el emparejamiento funciona bien, pero un BluetoothPairingDialog se muestra por un segundo o dos, luego desaparece – ver enlace a continuación.

Https://github.com/android/platform_packages_apps_settings/blob/master/src/com/android/settings/bluetooth/BluetoothPairingDialog.java

Dado que la emisión no está ordenada, no puedo llamar a abortBroadcast() , y me preguntaba si había alguna otra forma de evitar que apareciera el diálogo de emparejamiento. ¿Puedo conectarme al administrador de ventanas de alguna manera?

Honestamente no he sido capaz de llegar a una manera de hacer esto sin modificar el sdk. Si usted es el OEM, es fácil (estoy en 4.3):

En packages / apps / Settings / AndroidManifest.xml, comente el filtro de intenciones para el diálogo de emparejamiento:

 <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> 

En frameworks / base / core / java / android / bluetooth / BluetoothDevice.java elimine la anotación javadoc de @hide de esta constante

 @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_PAIRING_REQUEST = "android.bluetooth.device.action.PAIRING_REQUEST"; 

Y este método

 public boolean setPairingConfirmation(boolean confirm) 

A continuación, registre su propia actividad o receptor de difusión para la acción BluetoothDevice.PAIRING_REQUEST. Este receptor de difusión permite que el emparejamiento continúe sin la entrada del usuario (sólo si no se requiere 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 ); } } 

Tendrá que reconstruir el sdk y compilar su código en la nueva versión para obtener acceso a la constante y los métodos, y reemplazar Settings.apk en la partición / system para deshabilitar el diálogo. Es posible que también tenga que funcionar como una aplicación del sistema, pero creo que no.

  • Cuadro de diálogo con EditText y Spinner
  • Interfaz de diálogo Android obtener vistas de diálogo interno
  • Cambiar el color del texto del diálogo en 5.0+
  • Set Diálogo de actividad no cancanable
  • ¿Cómo evitar que ProgressDialog descarte el cambio de rotación de la pantalla en Android?
  • Altura de diálogo personalizada de Android
  • Inhabilitación (atenuación y descoloración) de la animación del cuadro de diálogo
  • Callback cuando se desactiva DialogFragment
  • El diálogo de Android desaparece por sí solo
  • ¿Cómo establecer la posición del diálogo?
  • Se desactiva el cuadro de diálogo personalizado cuando hago clic fuera de él
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.