2012-04-21 12 views
14

私は自分の質問に対する回答得なかった別のユーザー引用するつもりだ、この質問のためにある音量ボタンの使用方法:私は、ハードウェアの音量ボタンを使用していますAndoidアプリを書いた確認画面がオフ

をもう一つの目的。

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

画面がオフになっているときに、これらのボタンのクリックを検出する方法があるかどうか知りませんか? 出典:AV695's question

私はボリュームボタンを利用しているアプリ自分自身に取り組んでいますが、このユーザーにも述べたように画面がオフになると、onKeyPressイベントとボタンをチェックする通常の動作は動作を停止します。これは、アクティビティが画面上で一時停止するためです。

画面がオフのときにアクティビティを実行し続ける方法や、画面がオフのときにボリュームボタンの使用を確認する方法はありますか?私はこのためにサービスを使用しようとしましたが、Commonswareが指摘したようなボリュームキーをチェックすることは不可能です。

+0

あなたはこれを行うように見える何かの例を持っていますか?アプリケーションCPUが動作していて画面がオフになっている限られたケースの外で、カーネルが起動し、キーが押されたという事実を認識したことはありませんか?ハードウェアでないか、少なくとも無線フ​​ァームウェア改造が必要な場合。カーネルがキーイベントを認識している場合にのみ、プラットフォームにあなたのコードにそれを知らせるように説得するのが問題になる可能性があります。 –

+0

悲しいことに私はしません。私が考えることができるのは、メディアプレイヤーだけです。 私のアイデアは簡単です(あなたのポケットから携帯電話を取らずに、通知を確認するには、通知ボタンが押されている場合にデバイスを振動させる音量ボタンを押すだけです)。単純に作成するには複雑すぎる。 –

+0

ステータスバーに新しい通知(サードパーティのアプリケーションからのカスタム通知を含む)がある場合、LEDは通常点滅しませんか? –

答えて

6

を使用する必要があります睡眠中にカーネルの注意を促す。

妥当なシステムROMの変更の範囲内では、既存のオープンソースROMを変更して、カスタムのプラットフォームレベルのコードを通常は電源ボタンを操作するために挿入することがありますデバイスをロック解除する準備ができている - 少なくとも私たちが知っているのは、カーネルの注意を引くことだ。そのコードは、確認されていない通知があれば、音や振動によってユーザーに知らせることができます。

オプションで、デバイスの向きを確認したり、別のキーを押して、デバイスをポケットの外に持ち、ロックを解除しようとすると迷惑をかけないようにすることができます。


それとも、ボリュームキーを使用し、ものだけポケットに手探りする必要がなくなり、15分ごとに目を覚ますと、未確認の通知がある場合に振動するようにタイマーを設定できませんでした。


は、あなたはそれがカスタム要求です言及:それは1つのオフまたは低ボリュームの意味ならば、考慮すべきもう一つのオプションは、いくつかのベンダーはあなたがからプッシュ通知をすることができますSDKと一緒に「ブルートゥース時計を」持っているということでしょうアンドロイドデバイス。

通知が生成されたときに通知を取得できる場合は、通知をユーザーの手首に押し込んでから、電話をスリープ状態に戻すことができます。

+3

広範なコメントをいただきありがとうございます。悲しいことに、私はちょうどこの小さなプロジェクトについて考えずに進み、おそらくこのようなことがもう少し楽になる遠い未来にもう一度試してみると思います。それらのうちの1つだった "おお、あなたは何がクールだろうか知っていますか?"ランダムなオンライン見知らぬ人のアイデアのようなものなので、私はブルートゥースの時計のアイデアは少しすぎると思う。しかし、アイデアをありがとう:) –

+0

実際に目覚ましロックに頼っているときはどうしますか?画面が消えたら、アクティビティは一時停止し、キーは配信されません。 – ondra

-1

私はそれがこのような単純なであるかどうかわからないのですが、このアンドロイドブログをチェック:それは、アップ/ダウン、ボリュームコントロールや他の音楽のコントロールを受ける放送受信機の使用方法を説明し

Allowing applications to play nice(r) with each other: Handling remote control buttons

を。要約すると

私は、これはボリュームを持って、最後に変更を加えることなく、プラットフォーム、カーネル、または基礎無線ファームウェアレベルのいずれかで(バッテリ排水wakelockに頼らずに)サポートされていることを疑うregisterMediaButtonEventReceiver

+2

これらの方法が画面を表示しても機能すると思われる理由はありますか? –

2

アプリケーションがバックグラウンドのときにキーを傍受することはできませんが、KeyPress自体を聞くのではなく、キーを傍受することはできません。 ContentObserverは、this questionの説明に従って登録できます。

0

Chris Strattonが述べたように、アプリを生かし続ける唯一の方法は、バッテリーを切るウェイクロックを使用することです。

しかし、同じ状況で自分自身を見つけたので、別の解決策を思いつきました。残念ながら、Xposedフレームワークと同様に根元にあるデバイスが必要になります。

zposedプロセスを置き換えて、システムのコンストラクタやメソッドにフックできるXposedを使用すると、システムがそれらを処理する前に生のKeyEventsをキャッチすることができます。

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

あなたが関心のあるイベントを捕まえた後で、一時的なスリープ解除ロックを作成して作業を行うことができますが、作業を終えた後にスリープロックを解除することを忘れないでください。

これを達成する良い例は、Xposed Torchモジュールです。 しかし、根本的でないシステムに頼っているのであれば、バッテリーを消耗させないと簡単にできないというのは悪いニュースです...

0

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

バックグラウンドビデオレコーダー2(BVR1も可能ですが、試していない可能性もあります)は、画面がオフのときでもボリュームキーの押下を検出できるアプリケーションの1つです。私のアプリで画面が消えている間にボリュームキーの検出を実装しようとしている間に、BVR2がインストールされていて、それがどのように機能するかを見極めることを望んでいました。驚いたことに、画面が消えていてもボリュームキーを検出することはできない。私のアプリケーションには、音量の変化を監視するためのContentObserverがありましたが、画面が消えても機能しませんでした。 BVR2がアクティブなとき、私のアプリは画面が消えているときに音量キーの押下を検出することもできます。まだ掘っている。

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

別のアプリはQuickClickです。このアプリはあなたのアプリに欠けているもの、画面がオフであってもボリュームキーの押下を検出する能力を余計な措置なしに与えることができます。 QuickClickをインストールするだけで、何もしないでください。 ContentObserverを作成してストリームボリュームの変更を監視し、準備が整ったことを確認します。画面が消えていても、ボリュームキーの押下を検出できるようになりました。

私のアプリはバックグラウンドサービスとして動作します。

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

これらのアプリや他のアプリがボリュームキーの押下を検出できる場合は、その操作を行うことができます。私は、他のアプリに頼ることなく、私たちのアプリで実装できるように、それを行う方法を見つけるために専門家に依頼します。

この回答が役に立つとわかりましたら、アップ票をください。

関連する問題