Я пытаюсь создать приложение, которое распознает, когда кнопки громкости нажимаются глобально. Мне не нужно менять громкость, я просто хочу знать, когда она изменилась. Я уже могу это сделать, проблема в том, что я не могу сделать это с достаточной временной точностью.
В настоящее время, если я нажимаю кнопки слишком быстро (скажем, в течение 1 секунды), например, вверх-вниз, он обнаружит только половину этих нажатий. Если я сделаю короткую (полсекунду) паузу между нажатиями, то он будет точно определять каждое нажатие отдельной кнопки.
Проблема в том, что я не хочу, чтобы пользователь учился ждать между нажатиями кнопок, чтобы набрать правильный шаблон.
Вот мой сервисный код:
public class VolumeService extends Service {
private AudioManager mAudioManager;
private Handler mHandler = null;
private SettingsObserver mVolumeObserver;
private final IBinder mIBinder = new LocalBinder();
class SettingsObserver extends ContentObserver {
Context context;
int currentVolume;
SettingsObserver(Context c, Handler handler) {
super(handler);
context = c;
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
int volumeChange = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC) - currentVolume;
currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
int volumeCode = -1;
if (volumeChange < 0) {
volumeCode = 0;
} else if (volumeChange > 0) {
volumeCode = 1;
}
MainActivity.getInstance().updatePattern(volumeCode);
}
}
@Override
public void onCreate() {
super.onCreate();
mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
mVolumeObserver = new SettingsObserver(this, new Handler());
getApplicationContext().getContentResolver().registerContentObserver(Settings.System.CONTENT_URI, true, mVolumeObserver);
}
Основным действием является только массив, содержащий нажатия кнопок, зарегистрированные зарегистрированным обозревателем контента, и распечатывает их.
- Есть ли способ увеличить «частоту дискретизации», если можно так выразиться, моего обозревателя контента, чтобы он мог индивидуально определять нажатия на громкость? (Если я использую onKeyDown () в основном упражнении, проблема скорости не существует, но это противоречит цели глобального прослушивания).
- Это просто ограничение обозревателя контента, или я что-то не так делаю?
- Могу ли я использовать что-то еще, чтобы достичь той же цели?