上一篇转发博文的改进版
主Activity 类
public class MainActivity extends Activity {
private HeadsetPlugReceiver headsetPlugReceiver;
TextView mText; // 当前页面用于显示信息的文本控件
Handler mHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// get view by id
mText = (TextView)findViewById(R.id.readAudioResult);
setListener();
/* register receiver */
registerHeadsetPlugReceiver();
}
private void setListener()
{
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == 0x00)
{
mText.setText("mic 插入");
}else if(msg.what == 0x01){
mText.setText("mic 拨出");
}
}
};
}
private void registerHeadsetPlugReceiver() {
headsetPlugReceiver = new HeadsetPlugReceiver();
headsetPlugReceiver.setSendHandler(mHandler);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.HEADSET_PLUG");
registerReceiver(headsetPlugReceiver, intentFilter);
}
@Override
public void onStop(){
unregisterReceiver(headsetPlugReceiver); // 在界面不可见的情况下,就完全需要注销该接收器
super.onStop();
}
@Override
public void onDestroy()
{
super.onDestroy();
}
}
继承于BroadcastReceiver的广播消息接受者类 HeadsetPlugReceiver
public class HeadsetPlugReceiver extends BroadcastReceiver {
private static final String TAG = "HeadsetPlugReceiver";
// 发送消息队列
Handler sendHandler;
public Handler getSendHandler() {
return sendHandler;
}
public void setSendHandler(Handler sendHandler) {
this.sendHandler = sendHandler;
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.hasExtra("state")){
if (intent.getIntExtra("state", 0) == 0){
// Toast.makeText(context, "headset not connected", Toast.LENGTH_LONG).show();
Message msg = new Message();
msg.what = 0x01;
sendHandler.sendMessage(msg);
}
else if (intent.getIntExtra("state", 0) == 1){
// Toast.makeText(context, "headset connected", Toast.LENGTH_LONG).show();
Message msg = new Message();
msg.what = 0x00;
sendHandler.sendMessage(msg);
}
}
}
}
他们之间使用 Handler 来传递消息。
1)当由耳机插入手机时,HeadsetPlugReceiver发送0x00 消息,主界面会收到该消息,并显示mic插入。
2) 当由耳机拨出手机时,HeadsetPlugReceiver发送0x01 消息,主界面会收到该消息,并显示mi拔出。