单击的截取,参考这篇就可以了
http://blog.csdn.net/xzongyuan/article/details/39991709
今天加了长按事件,发现还挺多规则要掌握的,分享下:
1.线控不能长按超过500ms,超过这个时间,receiver就收不到广播。不知道是不是丢弃了KeyDown事件。
2.基于上述理由,我不通过audioManager获得信息,而是自己在KeyUp里广播Action。
3.补充下,onKeyLongPress()一般是不会响应的,只有你在onKeyDown()中加入event.startTrack()和return true,才会响应。不过,处理长按事件,不需要通过getRepeatCount()函数,在keyUp()实现就可以了,如下面代码。
4.补充知识,按下线控键不放时,onKeyDown()会一直侦测到key down事件,相当于不停地按按钮,而不是长按。可见 key down事件的侦测是在一个循环里面的,在keydown中不好区分长短按,在key up中比较容易实现。
修改后,helper类也不用了,变得很简单。
package com.example.headsetwithhelper;
import com.example.headsetwithhelper.HeadSetHelper.onHeadSetListener;
import android.support.v7.app.ActionBarActivity;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.provider.SyncStateContract.Helpers;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class HeadSetWithHelperActivity extends ActionBarActivity implements onHeadSetListener{
TextView mText;
boolean isLongPress;
int mDownCount;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_head_set_with_helper);
Log.e("HeadSetWithHelperActivity.java", "onCreate|" + "");
mText = (TextView)findViewById(R.id.tvShow);
HeadSetHelper.setOnMediaButtonClick(this);
IntentFilter filter = new IntentFilter();
filter.setPriority(1000);
filter.addAction(Intent.ACTION_MEDIA_BUTTON);
registerReceiver(new MyReceiver(), filter);
//HeadSetHelper.open(this);
}
@Override
public void onHeadSetClick(boolean isLongClick) {
// TODO Auto-generated method stub
Log.e("HeadSetWithHelperActivity.java", "onHeadSetClick|"
+ "");
if(isLongClick==true){
mText.setText("Long Click");
}else{
mText.setText("Short Click");
}
}
@Override
protected void onDestroy() {
HeadSetHelper.close(this);
super.onDestroy();
}
/*
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
Log.e("HeadSetWithHelperActivity.java", "onKeyLongPress:line|"
+ "");
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.setFlags(1);
sendBroadcast(intent);
return super.onKeyLongPress(keyCode, event);
}*/
/*
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getRepeatCount()>=1){
Log.e("HeadSetWithHelperActivity.java", "onKeyDown:line|" + "long click");
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.putExtra("isLong", true);
sendBroadcast(intent);
isLongPress=true;
}else{
Log.e("HeadSetWithHelperActivity.java", "!isLongPress" + "");
isLongPress=false;
}
if(!isLongPress){
Log.e("HeadSetWithHelperActivity.java", "onKeyDown:line|" + "short click");
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.putExtra("isLong", false);
sendBroadcast(intent);
}
event.startTracking();
return true;
}*/
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
long time = event.getEventTime()-event.getDownTime();
if(time==0){
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.putExtra("isLong", false);
sendBroadcast(intent);
return true;
}
if(time>500){
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.putExtra("isLong", true);
sendBroadcast(intent);
}else{
}
return true;
}
}