Android - 应用在后台

时间:2016-08-25 13:42:21

标签: android keyevent background-application

我正在开发一款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按钮?

谢谢

1 个答案:

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

希望这有帮助,

肖恩