android线控广播/长按功能开发总结

单击的截取,参考这篇就可以了

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;
	}
	 
	 
	 
	 
 
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值