2014-12-05 58 views
3

有人可以檢查這個代碼的問題。我已經實施了一項服務並將一個BluetoothDevice對象傳遞給它(BluetoothDevice對象通過intent時沒有錯誤/問題)。然後,在onStartCommand(),我打電話deviceToConnect.connectGatt(this,false,mGattCallback)。但我的BluetoothGattCallback()不工作(不打印任何東西)。代碼簡單直接。有人可以幫我調試它。BLE connectGatt()方法不報告BluetoothGattCallback ....中的任何內容?

編輯:我正在做Le設備掃描MainActivity()和傳遞設備對象到服務連接到設備。

public class PairedBleService extends Service 
{ 
    private BluetoothGatt mConnectedGatt; 
    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 
     Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // TODO Auto-generated method stub 
     super.onStartCommand(intent, flags, startId); 

     BluetoothDevice deviceToConnect = (BluetoothDevice) intent.getParcelableExtra(DEVICE_TO_CONNECT); 
     mConnectedGatt = deviceToConnect.connectGatt(this, false, mGattCallback); 

     return START_STICKY; 
    } 

    @Override 
    public void onDestroy() { 
     // TODO Auto-generated method stub 
     Toast.makeText(this, "Service End", Toast.LENGTH_SHORT).show(); 
     super.onDestroy(); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    private BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { 

    @Override 
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { 
     if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_CONNECTED) { 
      Toast.makeText(getApplicationContext(), "Peripheral connected", Toast.LENGTH_LONG).show(); 
     } else if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_DISCONNECTED) { 
      Toast.makeText(getApplicationContext(), "Peripheral Disconnected", Toast.LENGTH_LONG).show(); 
     } else if (status != BluetoothGatt.GATT_SUCCESS) { 
      gatt.disconnect(); 
     } 
    } 
} 

編輯:我試圖連接我的信標(外設)與標準的android藍牙s/w,我在那裏我能夠連接。但是它要求配對引腳,並且一旦將其連接並顯示在配對藍牙設備中。有沒有像connectGatt這樣的方法,我們可以問「配對別針」的用戶...我無法理解我失蹤。

+0

你在哪裏掃描設備? – 2014-12-05 12:43:14

+0

掃描我已完成我的活動,我正在通過BluetoothDevice對象進入服務連接到它。 – doga 2014-12-05 12:45:12

+0

你有無條件的吐司或登錄onConnectionStateChange以確保它被調用嗎? – 2014-12-05 13:46:46

回答

1

您的onBind方法返回null,因此您的主要活動無法與您的服務進行通信。

您的代碼應按照下面,

@ PairedBleService

public class LocalBinder extends Binder 
{ 
    PairedBleService getService() 
    { 
     return PairedBleService.this; 
    }; 
}; 

@Override 
public IBinder onBind(Intent intent) 
{ 
    // TODO Auto-generated method stub 
    return mBinder; 
}; 

private final IBinder mBinder = new LocalBinder(); 

@主要活動

//put this inside onServiceConnected 

PairedBleService bleService = ((PairedBleService.LocalBinder) service).getService(); 

// Your code for connecting with BLE device 
.................................... 
.................................... 
+0

Thanx響應vikram ...但我無法理解呢..因爲我能夠連接到服務,但BluetoothGattCallback不呼叫,即Toast消息不顯示onConnectionStateChange()........ – doga 2014-12-08 05:48:23

+0

請分享您的主要活動代碼 – 2014-12-08 17:35:06

1

編輯確實幫助。你想從應用程序內配對...

BluetoothDevice有一個createBond() API層19(4.4)的方法,所以這留下了4.3這是第一個BLE Android版本,但沒有很多剩下的那些。

這應該彈出用戶的PIN對話框。一旦設備成功綁定,您就可以連接。要知道綁定何時完成,您需要有一個BroadcastReceiver,註冊後才能收聽ACTION_BOND_STATE_CHANGED。進來的Intent具有EXTRA_BOND_STATE,其可以是BOND_BONDED,BOND_BONDING_BOND_NONE

所以在你的onStartCommand你想getBondState(),如果它是BOND_NON你想createBond()。如果是BOND_BONDING,則需要等待與BroadcastReceiver的綁定,並在綁定後進行連接。如果是BOND_BONDED那麼你可以連接。

相關問題