13

この質問については、質問に回答がなかった別のユーザーを引用します。

別の目的でハードウェアの音量ボタンを使用するAndoidアプリを作成しました。

アプリが実行中で表示されている場合は正常に機能しますが、画面をオフにするかタイムアウトにすると、ボタンのクリックがハンドラーに入りません。

画面がオフのときにこれらのボタンのクリックを検出する方法があるかどうか誰かが知っていますか?出典:AV695の質問

私は音量ボタンを使用するアプリを自分で作成していますが、このユーザーも指摘しているように、画面がオフになると、onKeyPressでボタンをチェックする通常の動作は機能しなくなります。これは、アクティビティが画面オフで一時停止されるためです。

画面がオフのときにアクティビティを実行し続ける方法、または画面がオフのときに音量ボタンの使用状況を確認する方法はありますか?以前にこのサービスを使用してみましたが、Commonswareが指摘しているように、そのような音量キーを確認することはできません。

4

5 に答える 5

6

プラットフォーム、カーネル、または基盤となる無線ファームウェアレベルのいずれかで、スリープ中のボリュームプレスをカーネルの注意を引くために最後に変更することなく、これが(バッテリーを消耗するウェイクロックに頼ることなく)サポートされているとは思えません。

合理的なシステムROMの変更の範囲内で、より合理的な方法は、デバイスの既存のオープンソースROMを変更して、ロック解除の準備としてデバイスをウェイクアップするために通常使用される電源ボタンの処理にカスタムプラットフォームレベルのコードを挿入することです。それ-少なくとも私たちが知っていることは、カーネルの注意を引くことです。そのコードは、未確認の通知がある場合、音またはバイブレーションによってユーザーに通知することができます。

オプションで、ユーザーがデバイスをポケットの外に持ってロックを解除しようとしているときに迷惑な方法でこれを行わないように、少し待つか、デバイスの向きを確認するか、別のキーが押されるのを探すことができます。


または、音量キーを使用できず、15分ごとに起動し、未確認の通知がある場合は振動するようにタイマーを設定するだけで、ポケットに手を入れる必要がなくなります。


あなたはそれがカスタムリクエストだと言います:それが1回限りまたは少量であることを意味する場合、考慮すべき別のオプションは、Androidデバイスから通知をプッシュできるSDKを備えた「Bluetoothウォッチ」を提供しているベンダーがいくつかあることです。

通知が生成されたときにそれをキャプチャできる場合は、通知をユーザーの手首に押し付けてから、電話をスリープ状態に戻すことができます。

于 2012-04-28T02:09:18.253 に答える
2

アプリケーションがバックグラウンドにある間は、KeyPress自体をリッスンする代わりに、キーをインターセプトすることはできません。この質問で説明されているように、ContentObserverを登録できます。

于 2012-04-30T22:09:39.017 に答える
0

Chris Strattonが述べたように、アプリを存続させる唯一の方法は、バッテリーを消耗するウェイクロックを使用することです。

しかし、同じ状況に陥ったので、別の解決策を思いつきました。残念ながら、ルート化されたデバイスとXposedフレームワークが必要になります。

Xposedを使用すると、zygotプロセスが置き換えられ、システムのコンストラクターとメソッドに接続できるため、システムが処理する前に生のKeyEventをキャッチできます。

これはPhoneWindowManager.interceptKeyBeforeQueueing()で行われます。XC_MethodHookを使用すると、前述のメソッドでbeforeHookedMethod()を使用して、デバイスが深いスリープ状態にある場合でも、すべてのハードウェアボタンイベントをキャッチできます。

興味のあるイベントをキャッチした後、一時的なウェイクロックを作成して作業を行うことができますが、作業が終了したらウェイクロックを解除することを忘れないでください。

これを実現する方法の良い例は、XposedTorchModuleです。ただし、ルート化されていないシステムに依存している場合、悪いニュースは、バッテリーを消耗しないと不可能であるということです...

于 2016-05-23T02:00:42.787 に答える
0

また、アプリに音量ボタンの押下検出を実装しようとしていましたが、コア部分が完了したら、後でその部分を開発するために残しました。バックグラウンドサービスから、電話がロックされているときでも画面がオンのときに音量キーが押されたことを検出できました。

バックグラウンドビデオレコーダー2(BVR2)(および可能性のあるBVR1も、私は試していません)は、画面がオフの場合でも音量キーの押下を検出できるアプリの1つです。アプリで画面がオフのときに音量キーの検出を実装しようとしているときに、BVR2をインストールして、どのように機能するかを確認しました。驚いたことに、画面がオフのときでも音量キーを検出できるようになりました。私のアプリには音量の変化を監視するContentObserverがありましたが、画面がオフのときは機能しませんでした。BVR2がアクティブな場合、画面がオフのときにアプリが音量キーの押下を検出することもあります。まだ掘っています。

ただし、BVR2には独自のトリガーアクションがあります。つまり、ビデオを録画することです。これは、アプリケーションが音量キーの押下を検出するためだけに実行したくないアクションです。

もう1つのアプリはQuickClickです。このアプリは、アプリに欠けているもの、画面がオフの場合でも音量キーの押下を検出する機能を、余分な不要なアクションなしで提供できます。QuickClickをインストールするだけで、アクションを構成しないでください。ストリームボリュームの変更を監視するためのを作成するContentObserverと、準備が整います。これで、画面がオフの場合でも、アプリで音量キーの押下を検出できるようになります。

私のアプリはバックグラウンドサービスとして実行されていることに注意してください。

上記の両方のアプリは他の用途を対象としていますが、ボリュームキー検出を使用してアクションを実行します。私は言及されたアプリのいずれにも接続していません。

これらのアプリ、および場合によっては他の数十のアプリが音量キーの押下を検出できる場合は、それを実行できます。別のアプリに依存せずにアプリに実装できるように、専門家にその方法を教えてもらいます。

この回答が役に立った場合は、賛成票を投じてください。

于 2016-05-28T18:37:49.950 に答える
-1

これほど単純かどうかはわかりませんが、このandroidブログを確認してください。

アプリケーションが互いにnice(r)を再生できるようにする:リモートコントロールボタンの処理

音量アップ/ダウンコントロールやその他の音楽コントロールを受信する放送受信機の使い方を説明しています。

要約すると、registerMediaButtonEventReceiverを使用する必要があります

于 2012-04-26T22:38:10.247 に答える