ボリュームキーイベントをリッスンするサービスを作成しようとしています。ボリュームキー(ハードウェア)印刷機をリッスンするサービスを作成することはできますか?
ボリュームキーが押されるたびに、サービスは番号にSMSを送信する必要がありますが、ボリュームキーイベントは検出できません。
ボリュームキーイベントをリッスンするサービスを作成しようとしています。ボリュームキー(ハードウェア)印刷機をリッスンするサービスを作成することはできますか?
ボリュームキーが押されるたびに、サービスは番号にSMSを送信する必要がありますが、ボリュームキーイベントは検出できません。
キーイベント(ボリュームキーを含む)を検出できるOnKeyListenerを使用できます。あなたはキーコードhereを見つけることができます。がんばろう!
私が理解する限り、サービスで直接キープレスを聞くことはできません(see this question)。
マルウェアを書くこと以外に、あなたが望むことをする理由を考えるのは難しいことです。
が必要です。しかし、どんなアクションもプレスで取ることができます。
public class VolumeKeyController {
private MediaSessionCompat mMediaSession;
private final Context mContext;
public VolumeKeyController(Context context) {
mContext = context;
}
private void createMediaSession() {
mMediaSession = new MediaSessionCompat(mContext, KeyUtil.log);
mMediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
mMediaSession.setPlaybackState(new Builder()
.setState(PlaybackStateCompat.STATE_PLAYING, 0, 0)
.build());
mMediaSession.setPlaybackToRemote(getVolumeProvider());
mMediaSession.setActive(true);
}
private VolumeProviderCompat getVolumeProvider() {
final AudioManager audio = mContext.getSystemService(Context.AUDIO_SERVICE);
int STREAM_TYPE = AudioManager.STREAM_MUSIC;
int currentVolume = audio.getStreamVolume(STREAM_TYPE);
int maxVolume = audio.getStreamMaxVolume(STREAM_TYPE);
final int VOLUME_UP = 1;
final int VOLUME_DOWN = -1;
return new VolumeProviderCompat(VolumeProviderCompat.VOLUME_CONTROL_RELATIVE, maxVolume, currentVolume) {
@Override
public void onAdjustVolume(int direction) {
// Up = 1, Down = -1, Release = 0
// Replace with your action, if you don't want to adjust system volume
if (direction == VOLUME_UP) {
audio.adjustStreamVolume(STREAM_TYPE,
AudioManager.ADJUST_RAISE, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}
else if (direction == VOLUME_DOWN) {
audio.adjustStreamVolume(STREAM_TYPE,
AudioManager.ADJUST_LOWER, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}
setCurrentVolume(audio.getStreamVolume(STREAM_TYPE));
}
};
}
// Call when control needed, add a call to constructor if needed immediately
public void setActive(boolean active) {
if (mMediaSession != null) {
mMediaSession.setActive(active);
return;
}
createMediaSession();
}
// Call from Service's onDestroy method
public void destroy() {
if (mMediaSession != null) {
mMediaSession.release();
}
}
}
android.os.serviceのOnKeyListener?それはうまくいくのですか?サービスはバックグラウンドエンティティです。それはonKeyDown/onKeyUpを監視しますか? – rupinderjeet
@ rupinderjeet47いいえ、それは正しいです、あなたはバックグラウンドサービスでそれらを聞くことができません – keyser
私は方法を見つけました、それは可能です。 – rupinderjeet