Мой onCreate () выглядит так:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter myIntentFilter = new IntentFilter("BATTERY_LEVEL");
myIntentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
myIntentFilter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
LocalBroadcastManager.getInstance(this).registerReceiver(onBroadcastReceive, myIntentFilter);
More things....
}
И тогда у меня этот класс ниже основной активности:
BroadcastReceiver onBroadcastReceive = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("Main Activity", "Broadcast received");
String action = intent.getAction();
Log.i("Action is", action);
if (action != null) {
switch (action) {
case "BATTERY_LEVEL":
I can take it from here...
}
}
И я могу взять его оттуда.Я просматриваю распечатку «Действие есть», чтобы увидеть входящие трансляции.
Позже в моем основном приложении я вызываю службу, которая устанавливает соединение Bluetooth на переднем плане.Я знаю, что связь хорошая.Во-первых, этот код в службе работает правильно, и я получаю «gattCallback STATE_CONNECTED»:
private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
//status of 0 if operation succeeds
Log.i("onConnectionStateChange", "Status: " + status);
switch (newState) {
case BluetoothProfile.STATE_CONNECTED:
Log.i("gattCallback", "STATE_CONNECTED");
android.os.SystemClock.sleep(600);
gatt.discoverServices();
break;
case BluetoothProfile.STATE_DISCONNECTED:
Log.e("gattCallback", "STATE_DISCONNECTED");
mGatt.close();
break;
default:
Log.e("gattCallback", "STATE_OTHER");
}
}
}
И, во-вторых, служба отправляет обратно Intents в основное приложение (действие «BATTERY_LEVEL» какопределено в onCreate () ". Эти уровни заряда аккумулятора поступают от устройства Bluetooth. Я получаю сообщения, которые говорят
I/Main Activity: Broadcast received
I/Action is: BATTERY_LEVEL
Но я никогда не получаю ACTION_STATE_CHANGED или ACTION_CONNECTION_STATE_CHANGED, даже если я намеренно включаю и выключаю Bluetooth. Естьпотому что это происходит в другом сервисе? есть ли способ обойти это?