java - Android:当我的应用程序处于后台时,如何检测自拍杆按钮点击

标签 java android kotlin broadcastreceiver

我正在构建一个 Android 应用程序,它可以检测连接到移动音频插孔的自拍杆按钮点击。

如果应用程序位于前台但不在后台,我能够捕获按钮单击。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
   switch (keyCode) {
       case KeyEvent.KEYCODE_VOLUME_UP:
           Toast.makeText(CustomPadActivity.this, "BUTTON clicked", Toast.LENGTH_SHORT).show();
           return true;
   }
   return super.onKeyDown(keyCode, event);
}

我尝试使用带有操作android.intent.action.MEDIA_BUTTON的广播接收器,但它根本没有捕获按钮点击。

list :

<receiver android:name=".MyReceiver" android:enabled="true">
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_BUTTON" />
    </intent-filter>
</receiver>

还有我的接收器类:

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "BUTTON clicked", Toast.LENGTH_SHORT).show();
    }

}

我在某处读到,如果我想捕获按钮点击,我需要播放一段音乐。该应用程序不是音频播放器。我不想在应用中播放音频。

我只是想在我的应用程序在后台时捕获自拍杆按钮的点击。

最佳答案

这是当然的

onKeyEvent only can be callbacks in the activity

服务根本不接收 KeyEvent 回调。

在 Activtiy 中向 AndroidManifest 添加 Intent

<intent-filter>
    <action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>

并将其添加到您的 Activity 中,否则它将不会显示在您的锁定屏幕上。

@Override
public void onAttachedToWindow() {
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}

关于java - Android:当我的应用程序处于后台时,如何检测自拍杆按钮点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60557437/

相关文章:

java - 如何在Android上打开Java程序

java - 菜单打开时覆盖后退按钮

Android Jetpack导航,另一个主机 fragment 内的主机 fragment

java - HashMap:它在TextView中显示最小值,但min_variable有更多值

java - 如何将图片添加到 JTabbedPane - 在空面板布局上?

java - 使用带有 unicode 字符的 DocumentFilter.replace

java - 如何在java中的HashMap中为相同的键值添加多个类的对象?

android - 你如何调试android 'aapt failed'错误

kotlin - 对于强制相同类型的 2 个参数的通用类型 T 有什么方法吗?

kotlin - 在表达式Kotlin中优化重复代码