5

ハードウェア ボタンの押下を傍受し、REST 呼び出しを行う Android アプリを開発しています。インターセプトする必要があるボタンはプッシュ ツー トーク (PTT) ボタンであるため、電源ボタンや音量ボタンなどの通常のボタンではありません。

アプリケーションがフォアグラウンドで実行されるときは、メソッド onKeyDown (int keyCode、KeyEvent イベント) を使用します。識別子としての PTT ボタンの番号は 27 で、メソッド内に次のコード行を記述しました。

if (keyCode == 27) {// PTT ボタンを押しました}

これはすべて完全に機能します。

しかし今、アプリケーションをバックグラウンドで送信し (moveTaskToBack(true); 関数を使用)、PTT ボタンを押すとアプリケーションをインターセプトします。

BroadcastReceiver、IntentFilter および Service については認識していますが、これらを使用すると、限られたインテント アクション (intent.action.SCREEN_OFF などの通常のアクション) を傍受できます。その中には、PTT ボタンの圧力を見つけることができないものがあります

アプリケーションがバックグラウンドにあるときに PTT ボタンを傍受する方法はありますか?

ありがとうございました

4

1 に答える 1

7

あなたの質問に対する解決策は、使用しているデバイスに大きく依存します。専用の PTT ボタンを備えた携帯電話をお持ちの場合、携帯電話の製造元はほぼ確実に、あなたのようなアプリ開発者が PTT ダウン イベントとアップ イベントを傍受できるようにインテントを提供していますが、詳細については製造元に問い合わせる必要があります。

たとえば、Kyocera、Sonim、および Casio の携帯電話にはこのようなインテントがあり、AndroidManifest.xml に受信者宣言を入れるだけで済みます。京セラの携帯電話の場合は次のようになります。

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

次に、up インテントと down インテントを受け取る単純な 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;
    }
}

お役に立てれば、

ショーン

于 2016-11-08T18:03:43.237 に答える