gpt4 book ai didi

android - 如何在线程内注册 BroadcastReceiver()

转载 作者:行者123 更新时间:2023-11-30 04:03:25 30 4
gpt4 key购买 nike

我有一个录音机 android 线程,我需要知道录音时麦克风/耳机是否已连接,所以我需要在线程内使用 BroadcastReceiver()。我如何注册它? this.registerReceiver() 不会工作,因为它只在 Activity 内部工作。

如果在线程内使用 broadcasereceivers 不是一个好主意,那么解决方案是什么?

这里是可以在 Activity 中运行但不能在线程中运行的代码:

    headsetReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.i("Broadcast Receiver", action);
if ((action.compareTo(Intent.ACTION_HEADSET_PLUG)) == 0) // if
// the
// action
// match
// a
// headset
// one
{
int headSetState = intent.getIntExtra("state", 0); // get
// the
// headset
// state
// property
int hasMicrophone = intent.getIntExtra("microphone", 0);// get
// the
// headset
// microphone
// property
if ((headSetState == 0) && (hasMicrophone == 0)) // headset
// was
// unplugged
// &
// has
// no
// microphone
{
// do whatever
}
}
}
};

this.registerReceiver(headsetReceiver, new IntentFilter(
Intent.ACTION_HEADSET_PLUG));

最佳答案

您需要将上下文传递给 Thread 构造函数,然后使用它来注册广播接收器:

//this.ctx is passed to the Thread constructor
this.ctx.registerReceiver(headsetReceiver, new IntentFilter(
Intent.ACTION_HEADSET_PLUG));

不要忘记在 Thread 的 finally{} 中注销接收器,否则可能会发生泄漏:

finally{
ctx.unregisterReceiver(headsetReceiver);
}

为了在主线程(例如 Activity )中更改 UI,您需要设置一个处理程序

关于android - 如何在线程内注册 BroadcastReceiver(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12116483/

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