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

Android 耳机状态监听

2016-05-04 16:43 477 查看
项目中遇到这样的需求,要求监听耳机插拔状态变化,进行埋点上报处理,把实现代码分享一下。

public class MainActivity extends AppCompatActivity {

private static final String TAG = MainActivity.class.getSimpleName();
private boolean isHeadsetOn;
private boolean isRegisteredAudioReceiver = false;
private BroadcastReceiver INSTANCE;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
protected void onResume() {
super.onResume();
isHeadsetOn = getAudioState();
Log.d(TAG, "[ouyangyj] isHeadsetOn = " + isHeadsetOn);
registerAudioReceiver();
}

@Override
protected void onPause() {
super.onPause();
unregisterAudioReceiver();
}

@Override
protected void onDestroy() {
super.onDestroy();
}

private boolean getAudioState(){
AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
return audioManager.isWiredHeadsetOn();
}

private void registerAudioReceiver(){
Log.d(TAG, "[ouyangyj] registerAudioReceiver");
if(INSTANCE==null){
INSTANCE = new HeadSetPlugListenner();
}

IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.HEADSET_PLUG");
// 或者使用Intent.ACTION_HEADSET_PLUG
if(INSTANCE!=null && !isRegisteredAudioReceiver){
try{
registerReceiver(INSTANCE, filter);
isRegisteredAudioReceiver = true;
}catch (Throwable throwable){
Log.d(TAG, "[ouyangyj] register audio receiver error!" + throwable);
}
}
}

private void unregisterAudioReceiver(){
Log.d(TAG, "[ouyangyj] unregisterAudioReceiver");
//使用完毕后,取消注册
if(INSTANCE!=null && isRegisteredAudioReceiver){
try{
unregisterReceiver(INSTANCE);
isRegisteredAudioReceiver = false;
}catch (Throwable throwable){
Log.d(TAG, "[ouyangyj] unregister audio receiver error!" + throwable);
}
}
}

class HeadSetPlugListenner extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.hasExtra("state")) {
if (intent.getIntExtra("state", 2) == 0){
Log.d(TAG, "[ouyangyj] 耳机拔出");
//拔出
}else if (intent.getIntExtra("state", 2) == 1) {
//插入
Log.d(TAG, "[ouyangyj] 耳机插入");
}
}
}
}
}


注意点:1、在AndroidManifest.xml文件中添加权限

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

                  2、注册和解注册的位置,根据实际情况做处理,防止内存泄露。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息