android 耳机判断短按、长按

来源:互联网 发布:安易数据恢复软件破解 编辑:程序博客网 时间:2024/06/10 08:30
package com.example.headlistenertest;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;

public class MainActivity extends Activity {

    private final String TAG = "HeadListener";
    private boolean longPressed = false;

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

    @Override
    protected void onResume() {
        // 注册监听
        Log.i(TAG, "onresume");
        Log.i(TAG, "注册监听");
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(Intent.ACTION_HEADSET_PLUG);
        registerReceiver(headSetReceiver, intentFilter);
        super.onResume();
    }

    @Override
    protected void onPause() {
        Log.i(TAG, "onPause");
        Log.i(TAG, "取消监听");
        // 取消监听
        unregisterReceiver(headSetReceiver);
        super.onPause();
    }

    private final BroadcastReceiver headSetReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context arg0, Intent arg1) {
            String action = arg1.getAction();
            if (action.equals(Intent.ACTION_HEADSET_PLUG)) {
                if (arg1.getIntExtra("state", 0) == 1) {
                    Log.i(TAG, "耳机插入");
                    // do something

                } else {
                    Log.i(TAG, "耳机没有插入");
                }
            }
        }
    };

    public boolean onKeyDown(int keyCode, android.view.KeyEvent event) {
        if (KeyEvent.KEYCODE_HEADSETHOOK == keyCode) {
//            Log.i(TAG, "按下了耳机");
            if (event.getRepeatCount() == 0) {
//                    Log.i(TAG, "短按");
                longPressed = false;
            } else {
                    //Log.i(TAG, "长按");
                    longPressed = true;
            }
            // 这里不需要执行父类的点击事件,所以直接return
            return true;
        }
        // 继续执行父类的其他点击事件
        return super.onKeyDown(keyCode, event);
    };

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (KeyEvent.KEYCODE_HEADSETHOOK == keyCode) {
            Log.i(TAG, "音量键 up");
            Log.i(TAG, "longPressed :"+longPressed);
            if(longPressed){
                Log.i(TAG, "长按");
            }else {
                Log.i(TAG, "短按");
            }
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }
}


0 0