2010-08-11 3 views
10

In Android 2.1, um ein Bluetooth-Gerät zu entkoppeln, können Sie zu Bluetooth-Einstellungen gehen, klicken Sie lange auf ein Gerät und wählen Sie Entkoppeln, um das Gerät zu entkoppeln. Ich möchte dies von meiner Bewerbung aus tun können. Ich kann eine Liste von gepaarten/verbundenen Geräten mit BluetoothAdapter.getBondedDevices() abrufen, aber ich kann nicht finden, wie man entpaare. Ich habe das BluetoothChat-Beispiel erkundet, und ich habe den SDK durchsucht, kann aber immer noch keine API finden, die dies erlaubt.So entkoppeln Sie Bluetooth-Gerät mit Android 2.1 sdk

Wie kann ich ein Bluetooth-Gerät entkoppeln?

Antwort

0

Es ist möglich, ein Gerät manuell über Droid Java zu entkoppeln.

Sie können eine versteckte Methode zum Entfernen der Bindung aufrufen.

+0

Könnte diese Frage stellen oder diese Sicht mehr suchen, aber der Vorschlag, den ich oben habe, ist die Art, wie ich programmgesteuert entpaaren fand. Um es manuell zu entkoppeln, verwenden Sie das Bluettooth-Programm bereits im Telefon. – JPM

11

So entkoppeln Sie ein gebundenes Gerät/entfernen Sie diese Methode, wobei macAddress die Zeichenfolge der MAC-Adresse des Geräts..i.e ist. "00: 02: 00: A3: 03: 05"

IBluetooth ib =getIBluetooth(); 
ib.removeBond(macAddress); 

Um die iBluetooth Objekt, das Sie durch ein paar Schritte gehen müssen

  1. erstellen ein Paket in einem Projekt namens android.bluetooth
  2. erstellen zwei Dateien, IBluetooth.aidl und IBluetoothCallback.aidl
  3. create-Methode in Ihre Dateien getBluetooth()

    private IBluetooth getIBluetooth() { 
    IBluetooth ibt = null; 
    
    try { 
    
        Class c2 = Class.forName("android.os.ServiceManager"); 
    
        Method m2 = c2.getDeclaredMethod("getService",String.class); 
        IBinder b = (IBinder) m2.invoke(null, "bluetooth"); 
    
        Class c3 = Class.forName("android.bluetooth.IBluetooth"); 
    
        Class[] s2 = c3.getDeclaredClasses(); 
    
        Class c = s2[0]; 
        Method m = c.getDeclaredMethod("asInterface",IBinder.class); 
        m.setAccessible(true); 
        ibt = (IBluetooth) m.invoke(null, b); 
    
    
    } catch (Exception e) { 
        Log.e("flowlab", "Erroraco!!! " + e.getMessage()); 
    } 
    
    return ibt; 
    } 
    
    genannt

    /* ** * ** * ** * ** IBluetooth.aidl * ** * ** * ** * **/

    package android.bluetooth; 
    
    import android.bluetooth.IBluetoothCallback; 
    import android.os.ParcelUuid; 
    
    /** 
        * System private API for talking with the Bluetooth service. 
        * 
        * {@hide} 
        */ 
    interface IBluetooth 
    { 
        boolean isEnabled(); 
        int getBluetoothState(); 
        boolean enable(); 
        boolean disable(boolean persistSetting); 
    
        String getAddress(); 
        String getName(); 
        boolean setName(in String name); 
    
        int getScanMode(); 
        boolean setScanMode(int mode, int duration); 
    
        int getDiscoverableTimeout(); 
        boolean setDiscoverableTimeout(int timeout); 
    
        boolean startDiscovery(); 
        boolean cancelDiscovery(); 
        boolean isDiscovering(); 
    
        boolean createBond(in String address); 
        boolean cancelBondProcess(in String address); 
        boolean removeBond(in String address); 
        String[] listBonds(); 
        int getBondState(in String address); 
    
        String getRemoteName(in String address); 
        int getRemoteClass(in String address); 
        ParcelUuid[] getRemoteUuids(in String address); 
        boolean fetchRemoteUuids(in String address, in ParcelUuid uuid, in IBluetoothCallback callback); 
        int getRemoteServiceChannel(in String address, in ParcelUuid uuid); 
    
        boolean setPin(in String address, in byte[] pin); 
        boolean setPasskey(in String address, int passkey); 
        boolean setPairingConfirmation(in String address, boolean confirm); 
        boolean cancelPairingUserInput(in String address); 
    
        boolean setTrust(in String address, in boolean value); 
        boolean getTrustState(in String address); 
    
        int addRfcommServiceRecord(in String serviceName, in ParcelUuid uuid, int channel, IBinder b); 
        void removeServiceRecord(int handle); 
    } 
    

/* ** * ** * ** * ** IBluetoothCallback.aidl * ** * ** * ** * **/

package android.bluetooth; 

    /** 
    * System private API for Bluetooth service callbacks. 
    * 
    * {@hide} 
    */ 
    interface IBluetoothCallback 
    { 
     void onRfcommChannelFound(int channel); 
    } 
+0

würden Sie bitte dieses Paket in einer Zip-Datei teilen? –

+0

Sorry für Ignoranz, aber ich verstehe nicht Punkt 3) "Methode in Ihren Dateien namens getBluetooth()" erstellen? Wo ist das ? Warum bekomme ich ein "kann nicht lösen Symbol IBluetooth" –

+0

Lol Ich schrieb dies vor 6 Jahren ...Ich kann mich nicht mehr an die Feinheiten erinnern. Höchstwahrscheinlich ist Ihre IBlueTooth.aidl nicht am richtigen Ort oder nicht im Build-Skript importiert. – JPM

3

Ein anderer Weg:

+1

Danke !!! Das hat super für mich funktioniert! Wo ist die Methode "removeBond (BluetoothDevice device)" definiert? Warum müssen wir uns auf die Reflexion berufen, um das zu nennen? – ossys