• 締切済み

Androidアプリで本体の音量変更イベント

何故、こんな事を考えているの?と不思議がる人もいるかと思いますが質問させてください。 Androidアプリを作っています。 少々カスタマイズしたAndroid機器で、音量変更ボタンに”ある機能”を同時起動するようにしています。そして、アプリ側から本体の音量変更ボタンを押した(音量up)状態と同じ挙動をさせたいと思っています。 音量を設定するには、AudioManagerクラスのsetStreamVolumeメソッドがありますが、音量変更のハードボタンを押して読み出されるイベントと同じ事をさせるには、どうしたらいいのでしょうか? 何卒よろしくお願いします。

みんなの回答

noname#161640
noname#161640
回答No.2

>このonKeyDownイベント自体をアプリから発生させる事はできないのでしょうか? イベントだけを発生させるのですか? こういうことですか? KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_VOLUME_DOWN); dispatchKeyEvent(event); Activityでこんな具合にKeyEventを作成してdispatchKeyEventすれば、イベントをディスパッチできます。そういうことでしょうか。

goroneko-begin
質問者

お礼

トライしてみましたができませんでした。 そもそもの音量マークも出ませんでした。 もし、何かヒントになることがあれば是非お願いします。

goroneko-begin
質問者

補足

>イベントだけを発生させるのですか? そうです。 やってみます。貴重な情報です。 結果はまた報告します。 ありがとうございました。

noname#161640
noname#161640
回答No.1

ボリュームボタンを押したときの処理を実装したい、ということでしょうか。 ハードウェアキーを押したときの処理というのは、ViewのonKeyDown/onKeyUpを利用して行えます。メソッド内で、発生したイベントのkeyCodeがKEYCODE_VOLUME_UP/KEYCODE_VOLUME_DOWNならば、ボリュームのアップ・ダウンのキーが押されたことがわかります。こんな感じですね。 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { // ここでボリュームダウンの処理 } if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { // ここでボリュームアップの処理 } return super.onKeyDown(keyCode, event); }

goroneko-begin
質問者

補足

ご回答ありがとうございます。 しかし、ハードキーを押されたことを検知する事を行いたいわけではなく、このonKeyDownイベント自体をアプリから発生させる事はできないのでしょうか?

関連するQ&A

専門家に質問してみよう