Android - 当应用程序处于后台时拦截硬件按键(PTT 按钮)

标签 android keyevent background-application

我正在开发一个 Android 应用程序,它可以拦截按下的硬件按钮并对它们的压力进行 REST 调用。 我必须拦截的按钮是一键通 (PTT) 按钮,而不是常规按钮,例如电源按钮或音量按钮。

当应用程序在前台运行时,我使用方法 onKeyDown (int keyCode, KeyEvent event)。 作为标识符的 PTT 按钮具有数字 27,然后在方法中我编写了以下代码行:

if (keyCode == 27) {//我按下了 PTT 键

所有这些都很完美。

但现在我在后台发送应用程序(使用函数 moveTaskToBack(true);),当我按下 PTT 按钮时我会拦截它

我知道 BroadcastReceiver、IntentFilter 和 Service,但是,这些允许您拦截有限的 Intent 操作(例如 intent.action.SCREEN_OFF 或其他正常操作),其中不能找到 PTT 按钮的压力

有什么方法可以在应用程序处于后台时拦截PTT按钮吗?

谢谢

最佳答案

您问题的解决方案在很大程度上取决于您使用的设备。如果您的手机带有专用的 PTT 按钮,那么手机制造商几乎肯定已经为像您这样的应用程序开发人员提供了一个 Intent 来拦截 PTT 按下和向上事件,但您需要联系制造商以获取更多信息。

例如,Kyocera、Sonim 和 Casio 的手机都有这样的可用 Intent,您只需在 AndroidManifest.xml 中放置一个接收器声明,就像 Kyocera 手机一样:

    <receiver android:exported="true" android:name="com.myapp.receiver.KeyReceiverKyocera">
        <intent-filter android:priority="9999999">
            <action android:name="com.kodiak.intent.action.PTT_BUTTON" />
            <action android:name="com.kyocera.android.intent.action.PTT_BUTTON" />
        </intent-filter>
    </receiver>

然后,一个简单的 BroadcastReceiver 类接收上下 Intent :

public class KeyReceiverKyocera extends BroadcastReceiver
{
    private static boolean keyDown = false;

    @Override
    public void onReceive(Context context, Intent intent)
    {
        String action = intent.getAction();

        if (keyDown)
            processPTTDown();
        else
            processPTTUp();

        keyDown = !keyDown;
    }
}

希望对您有所帮助,

肖恩

关于Android - 当应用程序处于后台时拦截硬件按键(PTT 按钮),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39146999/

相关文章:

ios - iOS 使用 Swift 记录应用程序在后台时的滑动量

android - 哎呀!有一个 ...previewing this pdf document android

android - 无法在 Google Play 控制台中停用封闭式 (Alpha) 轨道

android - 对于 Emacs,在 Android 中使用 CTRL 键的漫长旅程

android - 在 Android WebView 中读取键盘事件

ios - 获取所有在后台运行的应用程序的屏幕截图(允许使用私有(private) API)

windows-phone-8 - WP8 应用程序在后台运行

android:如何用模拟(假)坐标修复gps?

android - 让 Android 上的 WebView 使用 prefers-color-scheme : dark

java - KeyEvent停止监听JavaFX