您的位置:首页 > 移动开发 > Android开发

android 检测耳机是否插入-改进方案

2014-11-05 11:57 337 查看
上一篇转发博文的改进版

主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拔出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息