2011-12-02 87 views
1

这似乎是容易的,应该是这样的:如何检测MEDIA_BUTTON双击?

private long DOUBLE_CLICK_DELAY = 150; 
private long lastButtonClick = // oldValue 
private long currentButtonClick = System.currentTimeMillis(); 
... 
if (currentButtonClick - lastButtonClick < DOUBLE_CLICK_DELAY) // bla-bla 

,但我不能保存在一个广播接收器previuous点击的旧值。我应该将它保存在临时数据库中吗? (没有使用活动)

public class RemoteControlReceiver extends BroadcastReceiver { 

@Override 
    public void onReceive(Context context, Intent intent) { 
    if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { 
     if (/* DOUBLE_CLICK */){ 
     Toast.makeText(context, "Tra-la-la!", 100).show();  
     } 
    } 
    } 

} 
+1

你提到任何活动都不会被使用,但你在哪里保持按钮然后? – gianpi

+0

你知道什么是MEDIA_BUTTON吗?这是耳机按钮。 – Ghedeon

+1

实际上我不知道:)因为你有上下文,你只想存储一个值,那么使用SharedPreferences怎么样? – gianpi

回答

2

嗯,感谢@ gianpi它与SharedPreferences一起工作。但在这种情况下,不能确定读写速度。无论如何,如果任何人的的intrested:

@Override 
    public void onReceive(Context context, Intent intent) { 
    if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { 
     KeyEvent keyEvent = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); 
     if (keyEvent != null) { 
      if (keyEvent.getAction() == KeyEvent.ACTION_UP) { 
       SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0); 
       long last = settings.getLong("last", 0); 
       long delta = System.currentTimeMillis() - last; 
       if (delta < DOUBLE_CLICK_DELAY) {    
        context.startService(new Intent(context, MyService.class)); 
       } 
       SharedPreferences.Editor editor = settings.edit(); 
       editor.putLong("last", System.currentTimeMillis()); 
       editor.commit(); 
      } 
     } 
    } 
    } 
1

也许后已经有点老了,但今天我面临着同样的问题,我发现了一个更好的(或者至少更“优雅”)的解决方案,而不是使用共享优先。

声明全局变量静态在MainActivity:

static final long DOUBLE_CLICK_DELAY = 150; 
static long lastButtonClick = 0; // oldValue 
static long currentButtonClick = System.currentTimeMillis(); 
从RemoteControlReceiver类

做如下操作:

@Override 
public void onReceive(Context context, Intent intent) { 
    String intentAction = intent.getAction(); 
    if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) { 
     return; 
    } 
    KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); 
    if (event == null) { 
     return; 
    } 
    int action = event.getAction(); 
    if (action == KeyEvent.ACTION_DOWN) { 
     // Do something for action down 
    } 
    else if(action == KeyEvent.ACTION_UP){ 
     MainActivity.lastPressTime = MainActivity.newPressTime; 
     MainActivity.newPressTime = System.currentTimeMillis(); 
     long delta = MainActivity.newPressTime - MainActivity.lastPressTime; 

     // Case for double click 
     if(delta < MainActivity.DOUBLE_CLICK_DELAY){ 
      // Do something for double click 
     } 
    } 
}