Android - 当应用程序处于后台时拦截硬件按键(PTT 按钮)
Android - Intercept Hardware KeyPress (PTT Button) when app is in background
我正在开发一个 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按钮吗?
谢谢
您问题的解决方案在很大程度上取决于您使用的设备。如果你有一个带有专用 PTT 按钮的 phone,phone 的制造商几乎肯定已经为像你这样的应用程序开发人员提供了一个 Intent 来拦截 PTT 上下事件,但你需要联系制造商了解更多信息。
例如,来自 Kyocera、Sonim 和 Casio 的 phones 有这样的 Intents 可用,你只需要在你的 AndroidManifest.xml 中放置一个接收器声明,就像 Kyocera 一样phone:
<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 class 接收上下意图:
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 应用程序,它可以拦截按下的硬件按钮并对它们的压力进行 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按钮吗?
谢谢
您问题的解决方案在很大程度上取决于您使用的设备。如果你有一个带有专用 PTT 按钮的 phone,phone 的制造商几乎肯定已经为像你这样的应用程序开发人员提供了一个 Intent 来拦截 PTT 上下事件,但你需要联系制造商了解更多信息。
例如,来自 Kyocera、Sonim 和 Casio 的 phones 有这样的 Intents 可用,你只需要在你的 AndroidManifest.xml 中放置一个接收器声明,就像 Kyocera 一样phone:
<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 class 接收上下意图:
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;
}
}
希望这对您有所帮助,
肖恩