android - 如何捕捉 ACTION_MEDIA_BUTTON 的按住(长按)

标签 android broadcastreceiver

keydown 文档指出如果按住 keydown 将再次发送,但如果您按住媒体键我根本不会收到任何通知。有没有办法检测到这一点?它实际上是去谷歌(现在?)搜索语音输入 - 也许有一个广播表明我可以接收到正在发生的事情?

这是我的 BroadcastReceiver 的接收器:

@Override
public void onReceive(Context context, Intent intent)
{
    String intentAction = intent.getAction();
    int SoundID = 0;

    if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction))
    {
        KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
        if (event != null)
        {               
            int action = event.getAction();

            if (action == KeyEvent.ACTION_DOWN)
            {
                Log.d("Hi", "MEDIA keydown r" + event.getRepeatCount());

                if (event.getRepeatCount() == 1)
                    DoSomethingMagical();
                else if (event.getRepeatCount() == 0)
                    DoSomethingSpecial();
            }
        }
    }
}

最佳答案

您可以通过将以下 intent-filter 添加到您的 AndroidManifest.xml 来对长按事件使用react:

<intent-filter>
  <action android:name="android.speech.action.WEB_SEARCH"/>
  <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

不幸的是,这不会以与 android.intent.action.MEDIA_BUTTON 类型的操作相同的方式处理(您的 BroadcastReceiver 不会被调用)。

关于android - 如何捕捉 ACTION_MEDIA_BUTTON 的按住(长按),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19576164/

相关文章:

android - 使用 SimpleCursorAdapter 出错

java - 如何将参数传递给 BroadcastReceiver 的子类?

android - 屏幕关闭/打开的广播接收器和服务

java - BroadcastReceiver 仅触发一次

android - 我如何判断我的 Activity 是否由广播接收器启动?

c# - Xamarin C# Android : Reading a Blob from SQLite

java - 如何让 Sprite 从 Android 中的 gameView 边缘反弹?

Android 广播接收器错误 : Class not found exception

java - 带有 Fragments 的 AdapterView 不支持 addView(View)

Android Jobservice 被销毁