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

5

我正在开发一个Android应用程序,该程序拦截按下硬件按钮并向其施加压力的REST调用。我必须拦截的按钮是Push to talk (PTT)按钮,而不是常规按钮,例如电源按钮或音量按钮。

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

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

所有这些都完美地工作。

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

我知道BroadcastReceiver、IntentFilter和Service,但是它们只能拦截有限的意图操作(如intent.action.SCREEN_OFF或其他普通操作),其中无法找到PTT按钮的压力

是否有任何方法可以在应用程序在后台时拦截PTT按钮?

谢谢


1
Android 没有 PTT 按钮。您需要询问设备制造商如何实现此功能。从 onKeyDown() 的角度来看,它们似乎正在使用 KEYCODE_CAMERA,因此 也许 ACTION_CAMERA_BUTTON 可以起作用。 - CommonsWare
谢谢,我已经尝试了各种方法,但都没有成功。我会尝试联系设备制造商。 - Alberto Deidda
1个回答

8
您的问题的解决方案高度取决于您使用的设备。如果您有一款带有专用PTT按钮的手机,则手机制造商几乎肯定会为诸如您之类的应用程序开发人员提供意图以拦截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类接收上下行意图:

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

希望这能帮到您,
Shawn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接