gpt4 book ai didi

android - 处理程序和多个 Activity

转载 作者:太空狗 更新时间:2023-10-29 16:41:26 25 4
gpt4 key购买 nike

好的,我是 android 的新手,我正在尝试创建一个通过蓝牙与 arduino 交互的应用程序。我看过示例 BluetoothChat 并了解它如何使用 Handler 在“服务”、由它生成的线程和 MainActivity 之间进行通信。我的问题是我有多个 Activity 需要使用蓝牙服务。对于每个 Activity ,我都有一个这样的处理程序:

        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声明“特定线程的所有处理程序对象都收到相同的消息”。所以我不明白这个问题。每次启动 Activity 时,我是否需要将在该 Activity 中声明的处理程序传递给服务以使其接收消息?这似乎可行,但对我来说似乎不是一个好习惯。

最佳答案

如果您想在所有应用程序中发送消息,您应该使用 BroadcastReceiver,我认为这是您情况下的最佳方式。

 Intent intent = new Intent(ApplicationConstants.MY_MESSAGE);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);

在任何 Activity 中接收消息(您可以在多个 Activity 中使用它)

   BroadcastReceiver connectionUpdates = new BroadcastReceiver() {

@Override
public void onReceive(Context arg0, Intent intent) {

...//TODO here
}
};
LocalBroadcastManager.getInstance(this).registerReceiver(
connectionUpdates ,
new IntentFilter(ApplicationConstants.MY_MESSAGE));

希望对你有帮助

干杯,

关于android - 处理程序和多个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17082393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com