1.判断是否插入耳机:(FmRadioService.java)
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
/**
* Check whether antenna is available
* @return true or false indicate antenna available or not
*/
public boolean isAntennaAvailable() {
return mAudioManager.isWiredHeadsetOn();
}
2.当然,要加个权限,不然一直是返回false。
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
private class FmServiceBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, ">>> FmRadioService.onReceive");
String action = intent.getAction();
String command = intent.getStringExtra("command");
Log.d(TAG, "Action/Command: " + action + " / " + command);
// other app want FM stop, stop FM
if (Intent.ACTION_HEADSET_PLUG.equals(action)) {
// switch antenna should not impact audio focus status
mValueHeadSetPlug = (intent.getIntExtra("state", -1) == HEADSET_PLUG_IN) ? 0 : 1;
switchAntennaAsync(mValueHeadSetPlug);
if (SHORT_ANNTENNA_SUPPORT) {
boolean isSwitch = (switchAntenna(mValueHeadSetPlug) == 0) ? true : false;
Log.d(TAG, "onReceive.switch anntenna:isWitch:" + isSwitch);
// Plug out->Speaker Mode; Plug in->Earphone Mode
boolean plugInEarphone = (0 == mValueHeadSetPlug);
// Need check to switch to earphone mode for audio will
// change to AudioSystem.FORCE_NONE
if (plugInEarphone) {
mForcedUseForMedia = AudioSystem.FORCE_NONE;
mIsSpeakerUsed = false;
}
//setSpeakerPhoneOn(!plugInEarphone);
// Notify UI change to earphone mode, false means not speaker mode
Bundle bundle = new Bundle(2);
bundle.putInt(FmRadioListener.CALLBACK_FLAG,
FmRadioListener.LISTEN_SPEAKER_MODE_CHANGED);
bundle.putBoolean(FmRadioListener.KEY_IS_SPEAKER_MODE, !plugInEarphone);
notifyActivityStateChanged(bundle);
powerUpAutoIfNeed();
} else {
// Avoid Service is killed,and receive headset plug in
// broadcast again
if (!mIsServiceInited) {
Log.d(TAG, "onReceive.switch anntenna:service is not init"