好的,我是 android 新手,我正在尝试创建一个通过蓝牙与 arduino 交互的应用程序。我已经看到了示例 BluetoothChat,并看到了它如何使用处理程序在“服务”、由它产生的线程和 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;
}
但是在其他各种处理程序中没有收到消息。此处声明“特定线程的所有 Handler 对象都接收相同的消息” 。所以我无法理解这个问题。每次启动活动时,我是否需要将在该活动中声明的处理程序传递给服务以使其接收消息?这似乎有效,但对我来说似乎不是一个好习惯。