2017-09-28 2 views
1

Bonjour tous ensemble, je développe sur une application BLE, et j'ai écrit une activité pour la connexion GATT. Maintenant j'ai un problème parce que parfois le système reconnaît les services et les caractéristiques et d'autres fois pas.Services en Bluetooth faible énergie ne sont pas trouvés à chaque fois

Voici mon code:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_gatt); 

    peripheralTextView = (TextView) findViewById(R.id.PeripheralTextView); 
    peripheralTextView.setMovementMethod(new ScrollingMovementMethod()); 

    scanServiceButton = (Button) findViewById(R.id.scan_service); 
    scanServiceButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      mBluetoothGatt.discoverServices(); 
     } 
    }); 

    //get the Bluetooth device which comes from mainActivity 
    BluetoothDevice bluetoothDevice = getIntent().getExtras().getParcelable("selectedDevice"); 
    String test = bluetoothDevice.getAddress(); 
    Toast toast = Toast.makeText(this, "Verbunden mit " + test, Toast.LENGTH_LONG); 
    toast.show(); 

    Log.d("GattActivity", "connectGatt()"); 
    mBluetoothGatt = bluetoothDevice.connectGatt(this, false, mGattCallback); 
} 

Et voici ma onServiceDiscovered où parfois je reçois les services toutes les valeurs, mais à plusieurs reprises qu'il ne soit pas:

 @Override 
    public void onServicesDiscovered(BluetoothGatt gatt, int status) { 
     //new Services discovered 
     if(status == BluetoothGatt.GATT_SUCCESS){ 
      broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED); 
      displayGattServices(mBluetoothGatt.getServices()); 
     }else{ 
      Log.d("GattActivity", "onServicesDiscovered received: " + status); 
     } 
    } 

I googlé beaucoup et je pense qu'il est très similaire à l'échantillon de Google, mais je ne sais pas pourquoi il montre parfois et parfois non.

Peut-être que quelqu'un peut me aider

+0

Peut-être qu'il est important de savoir quels appareils j'ai testé. J'ai utilisé un Samsung S5 Mini et un Google Nexus 5, ma publicité est envoyée par un OnePlus 3T via l'exemple Advtertisement de Google. – Fab

Répondre

0

Je suis une solution espère maintenant est le bon.

La première chose que j'ai faite était de m'assurer que nous avions accès à l'emplacement grossier activé.

if(this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED){...} 

Et deuxièmement, j'oublié d'utiliser discoverServices() dans onConnectionStateChange()

@Override 
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {.... mBluetoothGatt.discoverServices()...;} 

Après avoir fait ces deux choses, il fonctionne à chaque fois (testé environ 50 fois l'espoir qu'il fonctionne maintenant) Mais si Vous connaissez une meilleure solution être libre de me répondre