Month: March 2012

  • Android 屏蔽线控耳机

    研究了Square Android 应用,它在刷卡界面监测耳机按钮事件,全部屏蔽掉线控事件。

    MediaButtonDisabler.java:

    package org.lytsing.square;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.util.Log;
    
    public class MediaButtonDisabler extends BroadcastReceiver {
    
        private static final String TAG = "MediaButtonDisabler";
    
        private static final BroadcastReceiver INSTANCE = new MediaButtonDisabler();
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d(TAG, "Intercepted media button.");
    
            abortBroadcast();
        }
    
        public static void register(Context context) {
            IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
            filter.setPriority(Integer.MAX_VALUE);
            context.registerReceiver(INSTANCE, filter);
        }
    
        public static void unregister(Context context) {
            context.unregisterReceiver(INSTANCE);
        }
    }

    简要说明,设置过滤优先级为最高,int 的最大值(2^32 – 1 = 2147483647),这样,就会在第一时间把线控事件的广播中止,使其他应用无法接收到。

    在Activity 调用:

        @Override
        protected void onPause() {
            super.onPause();
            
            MediaButtonDisabler.unregister(this);
        }
        
        @Override
        protected void onResume() {
            super.onResume();
            
            MediaButtonDisabler.register(this);
        }

    另外,我们发现一些Android手机在音频口插入我们的盒子读卡器后,音乐播放器乱放,反复播放又暂停又播放,开始以为是线控问题,屏蔽掉后,问题依旧。有做这方便的朋友,可以交流交流,分享一下。