【问题标题】:Android - Intercept Hardware KeyPress (PTT Button) when app is in backgroundAndroid - 当应用程序在后台时拦截硬件按键(PTT 按钮)
【发布时间】:2017-01-01 23:41:43
【问题描述】:

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

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

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

这一切都很完美。

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

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

有什么办法可以在应用在后台时拦截PTT按钮?

谢谢

【问题讨论】:

  • Android 没有 PTT 按钮。您需要询问您的设备制造商如何实现此功能。从onKeyDown() 的角度来看,他们似乎在使用KEYCODE_CAMERA,所以也许 ACTION_CAMERA_BUTTON 会起作用。
  • 谢谢,我想象并尝试了各种方式,但都没有成功。我会尝试联系设备制造商。

标签: android keyevent background-application


【解决方案1】:

您的问题的解决方案很大程度上取决于您使用的设备。如果您有一部带有专用 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 类,接收 up 和 down 意图:

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

希望这会有所帮助,

肖恩

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多