我正在开发一款Android应用程序,可拦截紧迫的硬件按钮,并让REST调用他们的压力。 我必须拦截的按钮是按键通话(PTT)按钮,因此不是常规按钮,例如电源按钮或音量按钮。
当应用程序在前台运行时,我使用onKeyDown方法(int keyCode,KeyEvent事件)。 PTT按钮作为标识符,编号为27,然后在方法内部编写了以下代码行:
if(keyCode == 27){//我按下PTT按钮}
这一切都很完美。
但现在我在后台发送应用程序(使用函数moveTaskToBack(true);),当我按下PTT按钮时,我会拦截它。
我知道IntentFilter和Service的BroadcastReceiver,但是,这些允许你拦截有限的意图动作(例如intent.action.SCREEN_OFF或其他正常动作), 其中不能找到PTT按钮的压力 。
当应用程序在后台时,有没有办法拦截PTT按钮?
谢谢
答案 0 :(得分:3)
您问题的解决方案在很大程度上取决于您使用的设备。如果您的手机带有专用的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类接收上下意图:
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;
}
}
希望这有帮助,
肖恩