如何获取耳机是否已插入和耳机实时插拔情况?

1、在一般的程序中检测手机是否已插入耳机的情况:

 AudioManager localAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
    boolean hasHeadset = localAudioManager.isWiredHeadsetOn();

 这两句话就可以知道此刻的手机是否有插入耳机,当然了只是写上这两句话是无效的,还需要在AndroidManifest.xml文件中添加如下权限。 

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

2、另外一种就是实时的检测耳机的插拔情况:

 耳机的插拔事件,android系统都会发出广播告知用户。我们在程序中需要去接收这个广播,在AndroidManifest.xml文件中写死是无效的,具体原因有待研究,网上查了一下说是“sticky” event。

走到这里就只能手动的在代码里面动态注册了啊!创建一个子类,继承自BroadcastReceiver,用于监听耳机的插拔情况。

public class HeadsetReceiver extends BroadcastReceiver {   
   
    @Override   
    public void onReceive(Context context, Intent intent) {   
      if (intent.hasExtra("state")){   
        if (intent.getIntExtra("state", 0) == 0){ //耳机插入
          Toast.makeText(context, "headset is not plug", Toast.LENGTH_LONG).show();   
        }   
        else if (intent.getIntExtra("state", 0) == 1){ //耳机拔出
          Toast.makeText(context, "headset is plug", Toast.LENGTH_LONG).show();   
        }   
      }   
    }    
}

 然后在要监听这个动作的Activity 的onCreate()方法中注册广播。在onDestory()方法中将注册了的广播注销。 

public class TestHeadSetPlugActivity extends Activity { 
private HeadsetReceiver headsetReceiver; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
/* register receiver */ 
registerHeadsetPlugReceiver(); 
} 
private void registerHeadsetPlugReceiver() { 
	headsetReceiver = new HeadsetReceiver(); 
IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction("android.intent.action.HEADSET_PLUG"); 
registerReceiver(HeadsetReceiver, intentFilter); 
} 
@Override 
public void onDestroy() { 
unregisterReceiver(HeadsetReceiver); 
super.onDestroy(); 
} 
} 

至此,耳机的插拔监听事件已经完成。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值