Je suis en train de développer une application où l'utilisateur peut connaître l'état de son appareil Bluetooth Le une fois qu'il/elle lance l'application et l'état de la connexion est mis à jour dans affichage de texte dans Home Fragment.J'ai essayé de l'implémenter en envoyant Broadcast à partir du service Ble et en l'attrapant dans le fragment onResume of Home et en le mettant ensuite à jour dans la vue du texte d'état. Le statut est mis à jour mais si je change le fragment et que je reviens au fragment home, l'affichage du texte pour afficher le statut devient vide bien que le périphérique Bluetooth Le soit connecté. Comment puis-je résoudre ce problème pour que l'état affiche connecté si l'appareil est connecté et déconnecté s'il est déconnecté?Comment afficher le Bluetooth Le périphérique connecté/déconnecté constamment état
Tout type de guidage sera très apprécié.
ici sont les segments de code que j'ai utilisés pour mettre en œuvre ce qui précède
Dans Bleservice.java
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
String intentAction;
if (newState == BluetoothProfile.STATE_CONNECTED) {
intentAction = ACTION_GATT_CONNECTED;
mConnectionState = STATE_CONNECTED;
broadcastUpdate(intentAction);
Log.i(TAG, "Connected to GATT server.");
// Attempts to discover services after successful connection.
Log.i(TAG, "Attempting to start service discovery:" +
mBluetoothGatt.discoverServices());
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
intentAction = ACTION_GATT_DISCONNECTED;
mConnectionState = STATE_DISCONNECTED;
Log.i(TAG, "Disconnected from GATT server.");
broadcastUpdate(intentAction);
}
}
private void broadcastUpdate(final String action) {
final Intent intent = new Intent(action);
sendBroadcast(intent);
}
Dans HomeFragment.java
public class HomeFragment extends Fragment
{
private BroadcastReceiver mReceiver;
@Override
protected void onResume() {
super.onResume();
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (Bleservice.ACTION_GATT_CONNECTED.equals(action)) {
mConnected = true;
updateConnectionState(R.string.connected);
} else if (Bleservice.ACTION_GATT_DISCONNECTED.equals(action)) {
mConnected = false;
updateConnectionState(R.string.disconnected);
}
}
};
getActivity().registerReceiver(mReceiver,makeGattUpdateIntentFilter());
}
private void updateConnectionState(final int resourceId) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
tv_connected_disconnected.setText(resourceId);
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
getActivity().unregisterReceiver(mReceiver);
}
private static IntentFilter makeGattUpdateIntentFilter() {
final IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Bleservice.ACTION_GATT_CONNECTED);
intentFilter.addAction(Bleservice.ACTION_GATT_DISCONNECTED);
return intentFilter;
}