如何注册一个BroadcastReceiver()一个线程中(How to register a B

2019-10-17 04:22发布

我有一个soundrecorder Android的线程,我需要知道,如果麦克风/耳机连接或不同时录制,所以我需要使用一个BroadcastReceiver()的thread.how里面我可以注册? this.registerReceiver()不会工作,因为它仅适用于内活动。

如果使用一个线程内broadcasereceivers是不是一个好主意,所以什么解决办法吗?

这里是将一个线程内的活动,并不会工作,在里面工作的代码:

    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));

Answer 1:

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

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

不要忘了注销您的接收器在最后{}在你的线程或可能发生泄漏:

finally{
       ctx.unregisterReceiver(headsetReceiver);
}

为了改变主线程(例如活动)内UI,你需要安装一个处理程序



文章来源: How to register a BroadcastReceiver() inside a thread