好吧,我是新來的android,我試圖創建一個應用程序,通過藍牙與arduino接口。我已經看到了藍牙示例,並看到它如何使用處理程序在「服務」,由它產生的線程和MainActivity之間進行通信。 我的問題是我有多個活動需要使用藍牙服務。 對於每個活動我有一個這樣的處理程序:處理程序和多個活動
mHandler = new Handler(){
@Override
public void handleMessage(Message message) {
switch (message.what){
case BtService.CHANGE_STATE:
if (message.arg1 == BtService.STATE_CONNECTING){
Intent i = new Intent (MainActivity.this,ConnectedActivity.class);
startActivity(i);
}
break;
}
}
};
,並在服務的構造我有這樣的:
private BtService(){
btm = BluetoothAdapter.getDefaultAdapter();
mHandler= new Handler(Looper.getMainLooper());
}
,當我需要發送一條消息我這樣做:
private synchronized void setState(int state){
mHandler.obtainMessage(CHANGE_STATE, state, -1).sendToTarget();
mState = state;
}
但在各種其他處理程序中未收到消息。 在here中聲明「特定線程的所有Handler對象都接收相同的消息。」所以我不明白這個問題。 每次開始活動時,我是否都需要傳遞給Handler在該Activity中聲明的服務以使其接收消息?這似乎有效,但對我來說這似乎不是一個好習慣。
很抱歉,如果我沒有做我自己很清楚,但是「真實」的問題是:「一個線程的所有處理程序是否都收到相同的消息,正如API培訓中所述,或者如果我理解錯誤是真的。無論如何,謝謝你的回答 – Campig