0

我要BroadCastReceivers:一個是從藍牙低功耗(BLE)監聽數據,另一個用於屏幕狀態如下:在BroadcastReceivers Android之間傳遞數據?

private String sreenState=""; 
public class ScreenStateReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
      sreenState="screen on"; 

     } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
      Log.i(TAG, "screen on"); 
      sreenState="screen on"; 
     } 
    } 
} 


private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     final String action = intent.getAction(); 

     if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action)) { 
      String data=intent.getStringExtra(BluetoothLeService.EXTRA_DATA); 
      Log.d("TAG",sreenState); 
     } 
    } 
} 

在BLE的廣播接收器,我想顯示的當前狀態屏幕通過screenState變量,當ACTION_DATA_AVAILABLE發生時。但是,它總是返回以前的屏幕狀態。例如,屏幕關閉,我收到數據,它會顯示「空」。如果屏幕打開,並且我收到數據,則狀態結果關閉。我認爲這是同步問題。我如何解決它?感謝所有

回答

1

您也可以閱讀BLE接收器本身中的當前屏幕狀態爲:

mIsScreenOn = ((PowerManager) this.getSystemService(Context.POWER_SERVICE)).isScreenOn(); 
+0

我想是因爲我需要檢查的開,關,屏幕鎖使用上面的電視,而不是隻屏幕 – Jame

+0

@ user8430我個人避免依賴'BroadcastReceiver'進行同步通信,因爲大部分時間甚至系統級廣播都顯着延遲 – Shaishav