0

周辺機器と通信するためにBLE中央アプリを作成しようとしています。android BLE writeCharacteristicは、デバイスで実行されたときにfalseを返しますが、デバッグモードでは機能します。

私はAndroidアプリhttps://play.google.com/store/apps/details?id=com.macdom.ble.blescannerを使用しています周辺を作成するにはhttps://developer.android.com/guide/topics/connectivity/bluetooth-le.html

ここで与えられたBluetoothLeServiceアプリを使用しています。

特性の変更を読んで通知することができました。BluetoothGattのwriteCharacteristicを使用して特性を更新するようにBluetoothLeServiceを変更しました。使用

デバイス:

周辺:Redmi注4(すべての許可()は、読み取り、書き込み、通知有効になっている)のセントラルとして使用

デバイス:

  • LGEネクサス5X( Android 7.1.2、API 25)

  • LGE Nexus 4(Android 5.1.1、API 22)

アンドロイドメーカー: バージョン2.3.3のGradleファイル: アンドロイド{ compileSdkVersion 25 buildToolsVersion "25.0.3"

defaultConfig { 
    minSdkVersion 18 
    targetSdkVersion 25 
} 

compileOptions { 
    sourceCompatibility JavaVersion.VERSION_1_7 
    targetCompatibility JavaVersion.VERSION_1_7 
} 

sourceSets { 
    main { 
     dirs.each { dir -> 
      java.srcDirs "src/${dir}/java" 
      res.srcDirs "src/${dir}/res" 
     } 
    } 
    androidTest.setRoot('tests') 
    androidTest.java.srcDirs = ['tests/src'] 

} 

}

コード:

@Override 
public void onCharacteristicWrite(BluetoothGatt gatt, 
             BluetoothGattCharacteristic characteristic, int status) { 
     Log.w("Tharun", "onServicesDiscovered received: " + status); 
     setStatus(status); 
     broadcastUpdate(WRITE_DATA); 
    } 
}; 


public void writeCharacteristic(BluetoothGattCharacteristic characteristic, String 
     writeString) { 
    if (mBluetoothAdapter == null || mBluetoothGatt == null) { 
     Log.w(TAG, "BluetoothAdapter not initialized"); 
     return; 
    } 
    characteristic.setValue(writeString); 

    boolean result = mBluetoothGatt.writeCharacteristic(characteristic); 

    Log.w(TAG, "writeCharacteristic result : " + result); 
} 

問題:

上記のデバイスでコードを実行すると、writeCharacteristicがfalseを返します。 onCharacteristicWriteも呼び出されません。

私はアンドロイドスタジオをアプリケーションにアタッチし、ブレークポイントを追加すると(ブレークポイントがない場合、ブレークポイントがないと動作しません)、書き込みが正常に行われ、onCharacteristicWriteが実行されています走る

問題の原因を特定できません。

私は関数のコードを調べて、なぜfalseを返すのかを調べようとしましたが、何も見つかりませんでした。

ご迷惑をおかけして申し訳ありません。

+0

書込みを開始した時点でまだ完了していないGATT操作が既に実行されていますか? – Emil

+0

まだ完成していないGATT操作がないことを確認しました。私の初期の疑惑は、アンドロイド・スタジオで実行されたソースコードが私のデバイス上のコードと異なることでした。それは本当だった。私はそこにすべてのコードをコピーした新しいプロジェクト(api 22とandroid 5.1.1)を作成しました。今はうまく動作します。助けてくれてありがとう。 – tharun

答えて

0

まだ完了していないGATT操作がないことを確認しました。私の初期の疑惑は、アンドロイド・スタジオで実行されたソースコードが私のデバイス上のコードと異なることでした。そのため、デバッグモードで実行されるコードは、デバイスでのみ実行されていたコードとは異なります。 それは本当だった。私はそこにすべてのコードをコピーした新しいプロジェクト(api 22とandroid 5.1.1)を作成しました。今はうまく動作します。

関連する問題