Есть ли способ ускорить обратную связь от обозревателя контента? - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь создать приложение, которое распознает, когда кнопки громкости нажимаются глобально. Мне не нужно менять громкость, я просто хочу знать, когда она изменилась. Я уже могу это сделать, проблема в том, что я не могу сделать это с достаточной временной точностью.

В настоящее время, если я нажимаю кнопки слишком быстро (скажем, в течение 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 () в основном упражнении, проблема скорости не существует, но это противоречит цели глобального прослушивания).
  • Это просто ограничение обозревателя контента, или я что-то не так делаю?
  • Могу ли я использовать что-то еще, чтобы достичь той же цели?
...