Programmaticamente accoppiare il dispositivo Bluetooth senza l'entrata del pin dell'utente

Il dispositivo Bluetooth che cerco di colbind ha sempre lo stesso codice di accesso. Ciò dovrebbe rendere ansible l'accoppiamento del dispositivo impostando il perno in modo programmato.

Dopo aver cercato di cercare come questo potrebbe essere fatto, ho finito con il codice qui sotto:

  • E 'una buona cosa scrivere la logica basata sul valore esadecimale di id generato in R.java android
  • Come get il text da EditText?
  • Custom ImageView si blocca il programma
  • Togliere il text dal filatore
  • Quale sistema operativo mobile devo codificare?
  • Come implementare un listener di cambiamenti
  • BluetoothDevice device = getDevice(); //To avoid the popup notification: device.getClass().getMethod("setPairingConfirmation", boolean.class).invoke(device, true); device.getClass().getMethod("cancelPairingUserInput", boolean.class).invoke(device, true); byte[] pin = ByteBuffer.allocate(4).putInt(1234).arrays(); //int pinn = 1234; //Entering pin programmatically: Method ms = device.getClass().getMethod("setPin", byte[].class); //Method ms = device.getClass().getMethod("setPasskey", int.class); ms.invoke(device, pin); //Bonding the device: Method mm = device.getClass().getMethod("createBond", (Class[]) null); mm.invoke(device, (Object[]) null); 

    cancelPairingUserInput mi dà un NoSuchMethodException , che è strano perché il metodo esiste nella class BluetoothDevice .

    È simile a Setpin o SetPasskey non fa nulla. Il dispositivo appena non accoppiare. Si accoppia solo dopo aver inserito manualmente il perno.

    Quindi l'unica linea di codice che funziona è:

     //Bonding the device: Method mm = device.getClass().getMethod("createBond", (Class[]) null); mm.invoke(device, (Object[]) null); 

    Uscita di Logcat:

     09-27 12:34:46.408: ERROR/App(11671): cancelPairingUserInput [boolean] java.lang.NoSuchMethodException: cancelPairingUserInput [boolean] at java.lang.Class.getConstructorOrMethod(Class.java:460) at java.lang.Class.getMethod(Class.java:915) at test.app.bluetooth.model.BluetoothDiscoveryAndPairing.pair(BluetoothDiscoveryAndPairing.java:97) at test.app.bluetooth.model.BluetoothDiscoveryAndPairing.access$000(BluetoothDiscoveryAndPairing.java:25) at test.app.bluetooth.model.BluetoothDiscoveryAndPairing$1.onReceive(BluetoothDiscoveryAndPairing.java:79) at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:756) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4921) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) at dalvik.system.NativeStart.main(Native Method) 

    Quindi cosa faccio male?

  • servizi di gioco di gioco google - test dei risultati di accesso ai conti in errore sconosciuto
  • Compresi Tess4J in un progetto Java come libreria in Eclipse
  • Actionbarsherlock + tabs + multi frammenti?
  • Distriggers l'evidenziazione dell'arancio in metallo
  • Attività vs ciclo di vita del frammento
  • Android: Come hide il cerchio di avanzamento nel login di Facebook
  • 2 Solutions collect form web for “Programmaticamente accoppiare il dispositivo Bluetooth senza l'entrata del pin dell'utente”

    Il metodo annullato di cancelPairingUserInput non esiste nel dispositivo. Non usarla.

    1. Devi registrare BroadcastReceiver per android.bluetooth.device.action.PAIRING_REQUEST
    2. Chiamata createBond ()
    3. Attendere che BroadcastReceiver scatta
    4. In BroadcastReceiver se l'azione è android.bluetooth.device.action.PAIRING_REQUEST chiamata questo metodo
     public void setBluetoothPairingPin(BluetoothDevice device) { byte[] pinBytes = convertPinToBytes("0000"); try { Log.d(TAG, "Try to set the PIN"); Method m = device.getClass().getMethod("setPin", byte[].class); m.invoke(device, pinBytes); Log.d(TAG, "Success to add the PIN."); try { device.getClass().getMethod("setPairingConfirmation", boolean.class).invoke(device, true); Log.d(TAG, "Success to setPairingConfirmation."); } catch (Exception e) { // TODO Auto-generated catch block Log.e(TAG, e.getMessage()); e.printStackTrace(); } } catch (Exception e) { Log.e(TAG, e.getMessage()); e.printStackTrace(); } } 

    Funziona anche su un dispositivo con versione Jelly Bean (4.1.2) di Android.

    questo funziona per me:

      IntentFilter filter2 = new IntentFilter( "android.bluetooth.device.action.PAIRING_REQUEST"); mActivity.registerReceiver( pairingRequest, filter2); private final BroadcastReceiver pairingRequest = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.bluetooth.device.action.PAIRING_REQUEST")) { mBluetoothDevice = needed; try { byte[] pin = (byte[]) BluetoothDevice.class.getMethod("convertPinToBytes", String.class).invoke(BluetoothDevice.class, "1234"); Method m = mBluetoothDevice.getClass().getMethod("setPin", byte[].class); m.invoke(mBluetoothDevice, pin); mBluetoothDevice.getClass().getMethod("setPairingConfirmation", boolean.class).invoke(mBluetoothDevice, true); } catch(Exception e) { e.printStackTrace(); } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.