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

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

<pre name="code" class="java"> AudioManager localAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);boolean hasHeadset = localAudioManager.isWiredHeadsetOn();

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

<span style="font-size:18px;"><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /></span>2、另外一种就是实时的检测耳机的插拔情况:

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

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

public class HeadsetReceiver extends BroadcastReceiver {@Overridepublic 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();}}}}<pre name="code" class="java">

然后在要监听这个动作的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(); } } 至此,耳机的插拔监听事件已经完成。

它不同于旅游,那需要一个风景稍微漂亮的地方,

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

相关文章:

你感兴趣的文章:

标签云: